From ab9d2760d6da9e76177dd7e336ab44594b0dc860 Mon Sep 17 00:00:00 2001 From: EdwardAngert <17991901+EdwardAngert@users.noreply.github.com> Date: Thu, 20 Mar 2025 18:39:05 +0000 Subject: [PATCH 01/10] add manage provisioner jobs --- docs/admin/provisioners.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/admin/provisioners.md b/docs/admin/provisioners.md index 35be50162c395..eeba15fc3d643 100644 --- a/docs/admin/provisioners.md +++ b/docs/admin/provisioners.md @@ -377,6 +377,18 @@ This can be disabled with a server-wide coder server --provisioner-daemons=0 ``` +## Manage provisioner jobs + +View more information about and manage your provisioners from the Coder dashboard. + +1. Under **Admin settings** select **Organizations**, then select **Provisioner jobs**. + +1. Select the **>** to expand each entry for more information. + +1. To delete a job, select the 🚫 at the end of the entry's row. + + If your user doesn't have the correct permissions, this option is greyed out. + ## Prometheus metrics Coder provisioner daemon exports metrics via the HTTP endpoint, which can be From 07df851ced92ff7b33159c0acfc5a084ea58d07c Mon Sep 17 00:00:00 2001 From: EdwardAngert <17991901+EdwardAngert@users.noreply.github.com> Date: Thu, 20 Mar 2025 18:43:30 +0000 Subject: [PATCH 02/10] add screenshot --- docs/admin/provisioners.md | 2 ++ .../admin/provisioners/provisioner-jobs.png | Bin 0 -> 79679 bytes 2 files changed, 2 insertions(+) create mode 100644 docs/images/admin/provisioners/provisioner-jobs.png diff --git a/docs/admin/provisioners.md b/docs/admin/provisioners.md index eeba15fc3d643..89f52110fd258 100644 --- a/docs/admin/provisioners.md +++ b/docs/admin/provisioners.md @@ -381,6 +381,8 @@ coder server --provisioner-daemons=0 View more information about and manage your provisioners from the Coder dashboard. +![Provisioner jobs in the dashboard](../images/admin/provisioners/provisioner-jobs.png) + 1. Under **Admin settings** select **Organizations**, then select **Provisioner jobs**. 1. Select the **>** to expand each entry for more information. diff --git a/docs/images/admin/provisioners/provisioner-jobs.png b/docs/images/admin/provisioners/provisioner-jobs.png new file mode 100644 index 0000000000000000000000000000000000000000..817f5cb5e341deab1135d9d4df5f756ef2d0b627 GIT binary patch literal 79679 zcmeFZRahL`w!e)83mQmpO9&R+9fAjU_u%es!3i4N9fE5^<8Hy-8h3a1f30)Q-fN$A z_uYLL=Xt81F1m{9u32-AImU0iWB!zv6-RxG{}u`g3RU8ph$0jetN;`g^bI0B@QE%R zGdA!B?Wia&1XVFgxDWgxVyrG>fs{GWDeA z=_jK7Fn|9rRM9K7cOo(0aRdcB=t=#TuP=!5 zcM>0FhSNSnW0L;I2As?OpC26^rtka5yQ4^?ilXX!j|9 zPopYLiPZPu3-9Ot=&UnUZ0UYf828Jan9xwf(qCHjHVIgivYPkqm-+UaVyXif+|HWp zwkuZK{aAnZif_knS}2~5mYc;Lc1O3d#~KSxVC5@u#a@eFz^73SI_scc4fXQpq2x&rp9ZgMs2LJHif zH)>uxpnpb3OMw@?)`Ma$+Fx7ga&kUeSkIgr4TT`Z{l}yK)$uGwx)7MfVmkWmbj2I< zoJzgw*QA&iWr0*uP19_f}k5G-7NEx$aXI$&!%}U%7gKi7eT^`wgjAdY4HwgcA z86FLF5>YYY#GMhXKdEe`$MZtfEun3IsQx*NYU+r5rAVcF2@jcciYuAotHbqm>bWliP4hbd)m3`=c{~)xW7)~ za@dmZGBBqjP5h#w`1JH-yxQhn19T8Sb1h}%TI=`THqi?Lue1rM1nl#u=yC!A0-dtn zDy6Cu#>2@>c@UzL20|_e5#ZKH#iKPV)oNtSfR-6+i)eO_4hsBot@=cNIOH$o1~vsFVTn4;E(1|SJaqT!A3B`AYk{2)XAf`S z=!`0L`QV&0=yj^RUhb1F#sprIzpp%Y=g$U!FoicYTOYbLFFh_z$}FTFjZc;uZBF@d zu(3_dqsgTbYRXmqUUtF}Lxib>{=KeO%9XNAM5)d3#@ zx`Mjty5xW+c7MK}E2|LBMnpzd;pu%gt}AB;N3r|zP+HEGU7R$ZQu*bV=gXwcenH)Q zLt%hLA^j^_pbZ4aR-vOp@NRx5T+s3P0X3rNr_bZnK6Q66D(IsBL^t?wxjAXNL}iF` zMibAo3%zY3pe4)e0*NkO{ZlfU&2keti4Uj3iuce}oQ&!)b5I zgAOxr<|mc_bIb9Ike%pXZ63>NJ~@vH>*usLZo1v!_v})+n0Oq3&Oc2H^sbLUmjU+( zKL5@?+l=(6T8h|*I^5Is^^Uhl6P9U13egX^HmGc6hZN(P)Z6GJh`FRQ=b^~N2d^{P zu6Vicq?j&Y|Bi5bBLDX&@bi=*?Pcfv0pC3aJ%|~CF^Umk;{CS$IFwu z2}4qU(A%J)EMNNAkHVQwRClEB7=MTv-d`ARgeB!k=NR9uzOKZYPqqDZsG_~Soz)s5 za<2W!`C!^UK0QI;O#;V?n+`l0p+5N?t{*8%>-`Sy{zP8$dcq!#bA!`9=Kgq2t8gbm zjQnplOI0LrqRX7YxGlEVQe+b0dMt=oeq|z04@7gfhM$RwD7xx(S+{(Hjft7d`aP?7 zz^_;qjwFAk#u)kjcC}8jqw=Q`_uuyXOaq3R;%R=0J)OsOl)C60S+M04k+|Pvp5O+W6hu>;9+9}NMAZ0^d$AwuwlROnE&)P(C8Qc=y zziRzesut^QX)Y^>YJh2kjfce6x!h;~(*nG#xoGsEV*u$*Twx~u#^=E60$PolKlQ7l z<2%8#YM5CG)JkIJhM1Q4!yh{@^P(wA(ESqGJr511*IidfVxR6WDVyLUbLbGf)LoYv z>?O0QW2suo#g8G;W;w&N0tKUSAmYI!hC(=VwOjbkR@>EnEVuyuK%_TXu1E7s<#nw- z&%ra~R%)*|i?5)IO{BlA_Z`09`*%M2E5^2oxQEi|je`j^hePV8OwI@W7fX&~G{+;H zb(vdbHz8usmcqkmtBrp9YQ>7iz${4tneKOiLbXPo6~R3TA@NbR{P{gn=^6Qw#&cBl zFn|%<71!!!(tdWu7~F02V6hd!s-xc>g+Hq-r9oE#Ps z-8j@tS&F(6qscJAcbb+B!-jdfO8J~Fi)Yn$85NB_RW`fb=&SWw#2{0^xeV9vhpCF&NpTLhX?AF(7~s735x}?ZA;04uU=P`uHwPN z?rC<&@_h;7eLS-BQ|&pbqI#_EZ%S@`b7<&sb5zbo*yv9Tbe;6(B z($EGkV1`?z;pa}O*6QKh$^G6dd-}*KC>Jn51A_^r!-CqxIMj-q3dxmisT7oQnYDL@ z-9I`5vg8Apc&e(%x18&z-R11456kqh zC@KMQ9-|+VzDdd^MdZbzH8`9tr-|lOluCi+wiQ-iovP4ze7}l%syhukE5di9t~La! z@w_Fzzn*iiaXJ1{=R!Z+MK2tTGFfFH?0n2|9Ae5UM{LO=$D2l@T2|ZBS)X53z`fDe z)3b+4<#Mu=!>(kv!cL2H_8*SE;*TG`4%C% zaM}i9_wJ_k7)qQ4LB{7hhKG*Y9&Nz))8(5=g|g&t=L&}M6f3m3XnX?$*tef=Db3c0 zTLuDDzEVux8x6WMCEmlDx8Lt*{e0qavC8^0b_DH6r4gviiT*^C^KK5^KtNSDJlgZ$v!ggk?zo@_Xu(_m)=tlxp0q>F;8Sv~ZHKu9M3m-yRPmg9a*OIUbj5F)E zhOa|v&B=jTAi@3%CkGD-yy?h=_8riD*%_?RTOGC?=vvnKs{$auBh$#KSKoGha#`$s zK|mv{on%Zo?I#wn5?dS2NjHgOC8LG!ML;L6)trmx^JL$wd7;w+m(6g=9?Vr%O23{Y ze@=z{dZ_O*AH0wvybQr&&FGbgvb@bD))zW3lXCJ*9e{zm&|3b&nm>QkWjFul`_0km zbcJt>hiQvU8hDSr(RfI;z@XLq%_hTt7&TTuqYpkyjhDW!I)!tewOc)AjO|b|iMYIA z`(}?FFBBA#qYNk(j{rB`@SRWgyUwNrz&p|KU-RTlVK$CM#-TS8(2~J`j|iD|4dr$I zb9le2H{NWy(AUfT;Rz2d00M{XqjqTfn{&wrf@t{|{s?j&#a&+%!r0TtHska($DKQ~ zw8S=RgIA(99n~d@BE0tpQK`;J##7li+jwr2JOvwCbSW!AFysR_cOG>sQR} zxBeteYl0v@Ym3#D=1SEVu9JRoX9o3#zfPxef;7_eTK47sj$WxHNEe1zw3pw5n}P?V zH~VC+H3`+$b#&@yU`U_#r%VaOx|@i#Om$cNEx`mh`ZtRh$!7|xUbui2k=Y)e(35a#z#297}XM$`E?N5tyQq{vmwj6N|R(ab|^_;u@R;XFOq>6#}fpcPEhx1~Msm z=zmhX7l>EGJ*w&xS`^T{HV47F$1?Ex!ja;{#d$7}(vrDmL9F-h-Wl93N}1)s!e6Ob zKDbcJ>fvgfC;c7Nd4+wgK@t#;Ca%*YiCc2@e!4ps(Rk0GtL^>9(fX6GTQVFz*;i%d z4OWwpRC2)S8$|qceK0fA^{v(8n%0L?y-MFt4SP~JwClv|E}$EGYJP(NdFy;a?(#R< zojkdVxaYa3YfzSwg`h|JOuu;NpBRv-Sg>_&+)xIm{U?RVI}=Ryrf=q^a*U4o#X=bi z+>TFilyU9EM|HM&(!JqHjA(T2QMLJuo;@r^yyEjnXqKRC=;M`E&)o7^&)XBx^?soQ zgnt{IHZjuP;guFtn8gQ36A-^bW>VK+b5u&y)5?hWz0}c2_>Iy6HMjWYEc(lUuwY;G zab9!bi1aggFC6^u7$9DvhAs@4aT%LWIjU@bnOxLH$7Q5az#a|6S?o|xZnH?ZW?#C$ z*j9qcs3SG)0s29jz1e+T|AGV4PlTJ<2<39k8G{nQd6vlUw8Q26iBt8Mag1hm!@ls9 zeLQNuX}S3n(GD;#q(3?dM=}W**G9S7H@W%qEnUX9-c!lTdruV>zmU?mjlhLutYyC= z;(I{tWchJzVX`aX$=bik^tX{&LWV()I1BJ&Y2&wbVY8f-UwlSm^rS8q&wd!+e}A2k z9N3v|Z-26M8Yx`5nkODzWZO?$e{ncfm^2f?VRG^MbZJ}4n3?_+6?4fU-2H#fr{g5!_dLfu)bayz#l2Fr!QYO{xdKpK%BYW;9jb~gEZ`HqAvg5{L3R|8l&rKju78__aPZXaIB-@6;ArQqj>^@i`nIk zNt4D)yht)(kQs>6u%W@~)!$2G9S1_+jcIL=_e0NmEZ8_O8FW2Lc27z;3O`y*7v;Qx z*A!3SxTjp>kai0e6&=sG}!bs&*EJc6PM3>{{c2z1q@vtW0>(dcv43XVi zy~gP0(Q3P1+IJxqGs}lvb5GX6j{n_s|08pW0mDjRb!5O;;;p5RWRlB^46c+u4*~}J z&Y0ZYMvFaObGJ+i^9*O*Bah<_hl?rr7+y6KBeiNM)qQ7?-AY|O8S-qAC5%-H{2&cf zV(ZPx)>AS3itkO6@q_c=D z$U8-D3>!QAx6S$dYv~O!E{FqGIg8&rVSk==b9$d)_>VRc|2L?0LL~8ICXTUGo{{l^ zUf?SSBJfr@k?eOBy}Vkalh6DxFCgk~vUt>VNDREihZ4)*1gN+!owhS5lQ>x?eLJ(K ztSB@fjR4deo$|WWO;zROjn*58+4C}4{in}N<7=IAoKJ2Q)|2zpRj#M~$8Y%&)6%c) zHhS#cF9s;qnx309fj(#Pmp*4#-yBqrjh~bS zI?ZSnbVJ z?vAruB0v?3WTvh@5n*fsh+X0v*Bu|+Sx(JN(}>3;{_WHQGLYNI(Fl%BpDte23G}KN zpsqz{_VRmNCF^6sF6xvV^~#tF#5aokj0My<;jvM}buR}_E0`DoU!S^WHU8G%&AW3f zhpj*Fu9x$s24XV$&2!PJ>5+J=b`XU^T2Ck4(yMSjbvRYYcM8R}fAygw?HESwT3l|} zDhnAOm#-6b#w$nSc01G0%{W}5W|)1_FYKwRy0VCzLbGsR^6O*#cYos-UGu~7@d{%{ z7XI6T`RnMf?{A1XLG|y+1|t5xum8G1uT-cYlB^11?Ei=s|5Cs@wBArXxrKk8`uK09 z=D&8%%wgX9cr|&bbN;J){LgXQciCr~bg|MQfBO&rb)7;a`MdM|1B3Oyb+!Nc;ug^# zUD5U5n2G*zoh*v4>-~kLAwmBTO3$#N-wLdJ8gTl@b^h-L{*@iFeRmdi7Dpy7JCN0$ z{W6qP`QtDBQES^VRrVNi{n>KXO169LJD`D2SFV1W{Eg&*$4(BLFO?+A;#7}fV6YFU z&b%k^w+nW_WSHc%FVv#iR%1LQb^e_^E}j_T)E9y0jNjhnGXesF)`QMf`^i-h*nDZEk#a16BeS=edb2fb z6WN<_rM}2lK%m{zc~N&@*Jn?v#UbyO>YeSGldH6Ief`!kv&ZKBCHgm-6y(IXU&D>Z zE2?I*PY+F5dOwV)m32R9qNt5&{#dRWIK~5&Nx$B{r}|99;}S#2<=BXl77P7X=A^RiA$XCYx_G+uAZD%-Cg=9j>WR5USDKn2`PX_qr z51Dg;c=SqC?AiP(9w12NUYvEa@ybpq1j=R*W1U?a@5&M_gI4EKl{g-9T5=$kDzrgx zqg;_Y0h(A5OHQs&*>#A#*x5!)Y;kw&X2Gs7y?%2u|75&T(ee+6OTe7xiD@y@8cU-$ zkL+9JW72I%`{#XTlX?R7M!un1JnHL^*Vv^6PU&{9N3~uC#&6)~hp6q-j!ARwr~j1I5F+TvJ(Bhe0q3$=FvO=1!A{a{~gl_Wa51B0ZYP zw@DSM_0k>8_p#n)c^dyVmRw2-2m!a38bN?6>QTSpiT@{Vw{vkUx6s%dqkFFCJd}_N zliKt4*d4<*`ZiwZ4KJQjf&9B(6};1(g&*>cZX<-$Ge_nUS)eLye)n+)PmL~;SQM`C z!Nk+mai6r^Hj3sQxnBfoqgq}0zXPQ2C5K$d@6wkVX(z1pIBR6W=1wWe@zGpBLNWR#-$$P)2;dn zXn}24zxer?=R5B9=X>3U9dOD&dfzUiJXdwFqJTE@#9Fh*ViNPb?8{9?Ac{FcqJTm@ zGYQPr5?TCtWjf7@yFrI`j8g~WIiPrIC0!U8n5%0&-)D*MhKAS9;VDEyj zex(BMkZpmait$2)s;N%C<{Bm2XAvunNA^^9p)ze)!Gu&8{}2O8B6zP`Tq zo6+})UiLq3e&GE^!s=_XN&?hP>FHUFcG(OMe>_Me!Q23l{iEGqv`o_&nSA7dedwMWozJt>0{$ zue2m6mne&xTh<(!ejiOw@oyWo8$DP+4A3(Z(DQMx%~yC{s4~q|x^2}mw_2GM{Gwcx z4^bDk?sGa@^U=8KKdmu6rFV1+>EH7N+bow2f~7uv8njqPF!tEX2?J7uHU-s|AH#88 zDM#LzX>Gy-fDo4NM=Ibl(aqgUK~~m{AqHwq;nSxPy$$$8$*Q@=hLKWZhwwR3Vxwy7Br=PB5 za&ios%7Ol)+bWlM=)sKXG-E3iKHm16SE7?NhlP;FUY^wGXgY9xIOmL6v2tGVK$%B) z=R7kDD#aj4K6N01zRpHscvd5L$!n-?`i5|ep$h7U9HU2*w23Z$>sb_k{zG6 zK$DlIJ-X!M979H8?MJ-)-n7H5yPMvcouQB1t+6thv5GPwMT~6Q58FL)`s4&?v0cs{ z5_Z8y4t5JD&9jt@-9vh!+gV)E>5x`!bG?fbw(RvU^&#R0l6v*{WzSB8^DXFRoW1-Hm@J2Y*d@_Hc-z`R5BtEXP?MZ|`lUw0pXN1feQWRWD z7>G5$O29rbdLeoT;2+O0oyhR$m#e-EirZEe8n=E<54R*`K~PS6Ad?aKfLsd;(mAAw zI*@C7ADgSMP6F1xK54MuH4xkzgryvxFqh?AN@u&!$g^~#elIjn-sBP`?0i}|vmX+hg zU0q#Hc526yf5yx#w}%As1FKhRe4g8xjV}Cjqd^RW`XOePokE?tP7bkPlz3mT44Bc zqUEsO1xLS-agQqXO0}JdMM)d=BOl3t0<@-QTp@<@mv41L|4o+qY1g zyq6aw@M^`uf`ifl6ob(;0%7g;suzneNfMQ=8jH$GO_xr~YN-(^%}vPoxJsbTq;39D6nmR?)a z+@z2xe`pXVIfl1A)~?edBlO`jUMpF~A5#NFg6;ZM9|f%R)ilslf94IjncDRM+oW>< zzy1A%@AO@6-Zs&3NtSTy)ggy^>+WT#>*U0Ro)~wILhrXC6wA@P)Nd~6X&j80|}U7aMa#(W4O^!q72L{K@#3J^DAJB zCsgHCyHi#}&RCKrfO*7pESM|3b@Niv(tdp&javPA6c^23rn7`-`>Kr%({U#>3LE2n ziS&wtdMwrIjwtoi1J_RoryO|LUB>+9TN+Sp)@M@ds`Qn1)sPVl<{XAUy1BvZa6?LM z#n`F8zO7tDCg?j2R;(!%J>)4?FE%@DJLMnUUF!^}mZff$j}OOkpbeHfvu|^^d@_x% zs&QO#8;EBRIzV|;*iKUl>Bi4#8uO|g9uFJ1$$F&>Q5}mxR9U$=#-xyWt7^^g0Z58X zEWXCiWTF0QIApr`GtMO`KV*~;U5W)-1KpmEk?$Nak$)|B`amaI>8W!WAcnk81Zq#7 zVAbtvkV0`uqPSbiHQkuBIIQy zU@uFWPvf|1yw|JHZk$>3NIFvWwZo!_Q1VyXushibzjJFGOJl-JjluQ3Xo%`DSx zRqW~xM?5+fkMf#z@MYxblzMnPHPtfN8o3Q;<+DFY#0sclXuDHJ=Z|^WmclXaab(!X zD=Ss2JZMVhd(`6cU{!oIU|%S6XG}5&ShcWwVkyn`XBQ#!Kbqg#p6=n!*UrKhn7Y|4 zR}@?Aa5PPp?D%+FssK7ge1!Pb=*?6+6BCmprz9@x*Khv63^}I{4`yht%*#qRmSEwR zaOl%<Lb*9&w$^({Auaj$yc zmZ#dwj?%N_>t&J%~GSDVeQ#1K`m(?n>R~cZK)(<^ZuZGKsU);3J%= zWGTU7GMr!6cya{?zC||Z%V3XuGH}ND;4C7;C{pC{Q}NlyobA3&y~+n!GaE3K)NSOn zr%XMa!LTgSfW1-PeE!kobgQ#|lo=DUo|_k440co(nA>Bj`l^d zp$L;0xx{&8te8nuhy<;CK}n9!Ql$Rzuq?ubtYLruXu*#1XE%+hRFL@UuQJguLkqBn zT$(Ho_MiGaE5}K5Y#8@dxG)ZvojL~h^PnRi%3A116;Y*)}_z!;9u_CCB#;aP8 zL3iIHz)KY;jt#z$TPRxYTtXh_6N4r%d=Edjm~bpKu6a{y7S`u0_z&kYU2hLIQW5R+ z1z|ZHwllE~&u4c+&JR5y@uyoA#+d2UNjN9Krs!o;zVu{; z`cRcf0=S=r!vmtQeG$-4reMh~TQhjwmmE@Q)O6Ws@Mw8lZR+pVJ3GtBh6~Sfd%1&V z%Xz5$Hh7*l{3uK|LU7|LT-+v52suSku#J@{xYK5SSSR#e4G}^zyxtN2Cf)mrim?81 z*O!1o|18W;Y!OTpIi$JxLnHiX!O?7rK$~&3k~}*N;Uw`ANXK9sz)746ROux=Ccc+% ze*KD}4YvA;pU+=mN&%oeC2Y31v=B!OF-F5+ydogMZFVU#Z45|F~PQY$B!dWuM*yueQe)VkVfsFZPPe6j_*b{`TbA))N6LzK*zI$bdU5^-+ek9F@b{u&@8@78 zhOY#*w#$xf=Bs2aZN+F<)XnN=EA=Sd?iU>IFL7c8UbT%Hjiv>2go1#?rroqyglV

6D8`pPh+UegF05)3)m5 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�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 literal 0 HcmV?d00001 From 912e52dc03f19d88d71b2ac782f13a05fc9d8dc6 Mon Sep 17 00:00:00 2001 From: EdwardAngert <17991901+EdwardAngert@users.noreply.github.com> Date: Fri, 21 Mar 2025 16:38:34 +0000 Subject: [PATCH 03/10] move Manage Provisioners to new doc under Provisioners --- coderd/provisionerdserver/acquirer_test.go | 4 +- docs/admin/infrastructure/architecture.md | 2 +- docs/admin/monitoring/health-check.md | 2 +- docs/admin/monitoring/logs.md | 2 +- .../index.md} | 40 ++++++------------- .../admin/provisioners/manage-provisioners.md | 15 +++++++ docs/admin/security/secrets.md | 2 +- docs/admin/setup/index.md | 2 +- docs/admin/templates/creating-templates.md | 2 +- .../templates/extending-templates/modules.md | 2 +- .../provider-authentication.md | 2 +- docs/admin/users/groups-roles.md | 4 +- docs/admin/users/organizations.md | 6 +-- docs/manifest.json | 12 +++++- docs/tutorials/best-practices/scale-coder.md | 2 +- .../best-practices/security-best-practices.md | 2 +- .../best-practices/speed-up-templates.md | 4 +- 17 files changed, 57 insertions(+), 48 deletions(-) rename docs/admin/{provisioners.md => provisioners/index.md} (90%) create mode 100644 docs/admin/provisioners/manage-provisioners.md diff --git a/coderd/provisionerdserver/acquirer_test.go b/coderd/provisionerdserver/acquirer_test.go index 22794c72657cc..91e5964f1e8ed 100644 --- a/coderd/provisionerdserver/acquirer_test.go +++ b/coderd/provisionerdserver/acquirer_test.go @@ -518,7 +518,7 @@ func TestAcquirer_MatchTags(t *testing.T) { t.Run("GenTable", func(t *testing.T) { t.Parallel() - // Generate a table that can be copy-pasted into docs/admin/provisioners.md + // Generate a table that can be copy-pasted into docs/admin/provisioners/index.md lines := []string{ "\n", "| Provisioner Tags | Job Tags | Same Org | Can Run Job? |", @@ -547,7 +547,7 @@ func TestAcquirer_MatchTags(t *testing.T) { s := fmt.Sprintf("| %s | %s | %s | %s |", kvs(tt.acquireJobTags), kvs(tt.provisionerJobTags), sameOrg, acquire) lines = append(lines, s) } - t.Log("You can paste this into docs/admin/provisioners.md") + t.Log("You can paste this into docs/admin/provisioners/index.md") t.Log(strings.Join(lines, "\n")) }) } diff --git a/docs/admin/infrastructure/architecture.md b/docs/admin/infrastructure/architecture.md index 9b2c2365a4966..dbac881bddeb8 100644 --- a/docs/admin/infrastructure/architecture.md +++ b/docs/admin/infrastructure/architecture.md @@ -42,7 +42,7 @@ _provisionerd_ is the execution context for infrastructure modifying providers. At the moment, the only provider is Terraform (running `terraform`). By default, the Coder server runs multiple provisioner daemons. -[External provisioners](../provisioners.md) can be added for security or +[External provisioners](../provisioners/index.md) can be added for security or scalability purposes. ### Workspaces diff --git a/docs/admin/monitoring/health-check.md b/docs/admin/monitoring/health-check.md index cd14810883f52..456d52e0bce8b 100644 --- a/docs/admin/monitoring/health-check.md +++ b/docs/admin/monitoring/health-check.md @@ -294,7 +294,7 @@ be built until there is at least one provisioner daemon running. **Solution:** If you are using -[External Provisioner Daemons](../provisioners.md#external-provisioners), ensure +[External Provisioner Daemons](../provisioners/index.md#external-provisioners), ensure that they are able to successfully connect to Coder. Otherwise, ensure [`--provisioner-daemons`](../../reference/cli/server.md#--provisioner-daemons) is set to a value greater than 0. diff --git a/docs/admin/monitoring/logs.md b/docs/admin/monitoring/logs.md index 49861090800ac..f1a5b499075f3 100644 --- a/docs/admin/monitoring/logs.md +++ b/docs/admin/monitoring/logs.md @@ -24,7 +24,7 @@ Connect logs are all captured in the `coderd` logs. ## `provisionerd` Logs -Logs for [external provisioners](../provisioners.md) are structured +Logs for [external provisioners](../provisioners/index.md) are structured [and configured](../../reference/cli/provisioner_start.md#--log-human) similarly to `coderd` logs. Use these logs to troubleshoot and monitor the Terraform operations behind workspaces and templates. diff --git a/docs/admin/provisioners.md b/docs/admin/provisioners/index.md similarity index 90% rename from docs/admin/provisioners.md rename to docs/admin/provisioners/index.md index 89f52110fd258..55527d28400ca 100644 --- a/docs/admin/provisioners.md +++ b/docs/admin/provisioners/index.md @@ -1,7 +1,7 @@ # External provisioners By default, the Coder server runs -[built-in provisioner daemons](../reference/cli/server.md#--provisioner-daemons), +[built-in provisioner daemons](../../reference/cli/server.md#--provisioner-daemons), which execute `terraform` during workspace and template builds. However, there are often benefits to running external provisioner daemons: @@ -11,7 +11,7 @@ are often benefits to running external provisioner daemons: - **Isolate APIs:** Deploy provisioners in isolated environments (on-prem, AWS, Azure) instead of exposing APIs (Docker, Kubernetes, VMware) to the Coder server. See - [Provider Authentication](../admin/templates/extending-templates/provider-authentication.md) + [Provider Authentication](../../admin/templates/extending-templates/provider-authentication.md) for more details. - **Isolate secrets**: Keep Coder unaware of cloud secrets, manage/rotate @@ -19,16 +19,16 @@ are often benefits to running external provisioner daemons: - **Reduce server load**: External provisioners reduce load and build queue times from the Coder server. See - [Scaling Coder](../admin/infrastructure/index.md#scale-tests) for more + [Scaling Coder](../../admin/infrastructure/index.md#scale-tests) for more details. Each provisioner runs a single -[concurrent workspace build](../admin/infrastructure/scale-testing.md#control-plane-provisionerd). +[concurrent workspace build](../../admin/infrastructure/scale-testing.md#control-plane-provisionerd). For example, running 30 provisioner containers will allow 30 users to start workspaces at the same time. Provisioners are started with the -[`coder provisioner start`](../reference/cli/provisioner_start.md) command in +[`coder provisioner start`](../../reference/cli/provisioner_start.md) command in the [full Coder binary](https://github.com/coder/coder/releases). Keep reading to learn how to start provisioners via Docker, Kubernetes, Systemd, etc. @@ -83,7 +83,7 @@ Kubernetes/Docker/etc. A user account with the role `Template Admin` or `Owner` can start provisioners using their user account. This may be beneficial if you are running provisioners -via [automation](../reference/index.md). +via [automation](../../reference/index.md). ```sh coder login https:// @@ -110,7 +110,7 @@ Global pre-shared keys (PSK) make it difficult to rotate keys or isolate provisi A deployment-wide PSK can be used to authenticate any provisioner. To use a global PSK, set a -[provisioner daemon pre-shared key (PSK)](../reference/cli/server.md#--provisioner-daemon-psk) +[provisioner daemon pre-shared key (PSK)](../../reference/cli/server.md#--provisioner-daemon-psk) on the Coder server. Next, start the provisioner: @@ -157,12 +157,12 @@ coder templates push on-prem-chicago \ This can also be done in the UI when building a template: -![template tags](../images/admin/provisioner-tags.png) +![template tags](../../images/admin/provisioner-tags.png) Alternatively, a template can target a provisioner via [workspace tags](https://github.com/coder/coder/tree/main/examples/workspace-tags) inside the Terraform. See the -[workspace tags documentation](../admin/templates/extending-templates/workspace-tags.md) +[workspace tags documentation](../../admin/templates/extending-templates/workspace-tags.md) for more information. > [!NOTE] @@ -237,17 +237,17 @@ This is illustrated in the below table: Provisioners can broadly be categorized by scope: `organization` or `user`. The scope of a provisioner can be specified with -[`-tag=scope=`](../reference/cli/provisioner_start.md#-t---tag) when +[`-tag=scope=`](../../reference/cli/provisioner_start.md#-t---tag) when starting the provisioner daemon. Only users with at least the [Template Admin](./users/index.md#roles) role or higher may create organization-scoped provisioner daemons. There are two exceptions: -- [Built-in provisioners](../reference/cli/server.md#--provisioner-daemons) are +- [Built-in provisioners](../../reference/cli/server.md#--provisioner-daemons) are always organization-scoped. - External provisioners started using a - [pre-shared key (PSK)](../reference/cli/provisioner_start.md#--psk) are always + [pre-shared key (PSK)](../../reference/cli/provisioner_start.md#--psk) are always organization-scoped. ### Organization-Scoped Provisioners @@ -371,26 +371,12 @@ docker run --rm -it \ As mentioned above, the Coder server will run built-in provisioners by default. This can be disabled with a server-wide -[flag or environment variable](../reference/cli/server.md#--provisioner-daemons). +[flag or environment variable](../../reference/cli/server.md#--provisioner-daemons). ```sh coder server --provisioner-daemons=0 ``` -## Manage provisioner jobs - -View more information about and manage your provisioners from the Coder dashboard. - -![Provisioner jobs in the dashboard](../images/admin/provisioners/provisioner-jobs.png) - -1. Under **Admin settings** select **Organizations**, then select **Provisioner jobs**. - -1. Select the **>** to expand each entry for more information. - -1. To delete a job, select the 🚫 at the end of the entry's row. - - If your user doesn't have the correct permissions, this option is greyed out. - ## Prometheus metrics Coder provisioner daemon exports metrics via the HTTP endpoint, which can be diff --git a/docs/admin/provisioners/manage-provisioners.md b/docs/admin/provisioners/manage-provisioners.md new file mode 100644 index 0000000000000..6baa76862a42b --- /dev/null +++ b/docs/admin/provisioners/manage-provisioners.md @@ -0,0 +1,15 @@ +# Manage Provisioners + +## Manage provisioner jobs + +View more information about and manage your provisioner jobs from the Coder dashboard. + +![Provisioner jobs in the dashboard](../../images/admin/provisioners/provisioner-jobs.png) + +1. Under **Admin settings** select **Organizations**, then select **Provisioner jobs**. + +1. Select the **>** to expand each entry for more information. + +1. To delete a job, select the 🚫 at the end of the entry's row. + + If your user doesn't have the correct permissions, this option is greyed out. diff --git a/docs/admin/security/secrets.md b/docs/admin/security/secrets.md index 7985c73ba8390..25ff1a6467f02 100644 --- a/docs/admin/security/secrets.md +++ b/docs/admin/security/secrets.md @@ -7,7 +7,7 @@ guide to This article explains how to use secrets in a workspace. To authenticate the workspace provisioner, see the -provisioners documentation. +provisioners documentation. ## Before you begin diff --git a/docs/admin/setup/index.md b/docs/admin/setup/index.md index cf01d14fbc30b..96000292266e2 100644 --- a/docs/admin/setup/index.md +++ b/docs/admin/setup/index.md @@ -154,4 +154,4 @@ more information. ## Up Next - [Setup and manage templates](../templates/index.md) -- [Setup external provisioners](../provisioners.md) +- [Setup external provisioners](../provisioners/index.md) diff --git a/docs/admin/templates/creating-templates.md b/docs/admin/templates/creating-templates.md index 50b35b07d52b6..a0a6b54366948 100644 --- a/docs/admin/templates/creating-templates.md +++ b/docs/admin/templates/creating-templates.md @@ -68,7 +68,7 @@ coder templates push > [!NOTE] > If `template push` fails, Coder is likely not authorized to deploy > infrastructure in the given location. Learn how to configure -> [provisioner authentication](../provisioners.md). +> [provisioner authentication](../provisioners/index.md). You can edit the metadata of the template such as the display name with the [`templates edit`](../../reference/cli/templates_edit.md) command: diff --git a/docs/admin/templates/extending-templates/modules.md b/docs/admin/templates/extending-templates/modules.md index 488d43eb616f0..1f454bb26540c 100644 --- a/docs/admin/templates/extending-templates/modules.md +++ b/docs/admin/templates/extending-templates/modules.md @@ -120,7 +120,7 @@ template as the underlying module. ### Private git repository If you are importing a module from a private git repository, the Coder server or -[provisioner](../../provisioners.md) needs git credentials. Since this token +[provisioner](../../provisioners/index.md) needs git credentials. Since this token will only be used for cloning your repositories with modules, it is best to create a token with access limited to the repository and no extra permissions. In GitHub, you can generate a diff --git a/docs/admin/templates/extending-templates/provider-authentication.md b/docs/admin/templates/extending-templates/provider-authentication.md index fe2572814358d..4ddf23fa38fb2 100644 --- a/docs/admin/templates/extending-templates/provider-authentication.md +++ b/docs/admin/templates/extending-templates/provider-authentication.md @@ -46,7 +46,7 @@ There are two ways to use a remote Docker host for authentication: - Configure the Docker provider to use a [remote host over SSH or TCP](https://registry.terraform.io/providers/kreuzwerker/docker/latest/docs#remote-hosts). -- Run an [external provisioner](../../provisioners.md) on the remote docker +- Run an [external provisioner](../../provisioners/index.md) on the remote docker host. Other providers might also support authenticated environments. Check the diff --git a/docs/admin/users/groups-roles.md b/docs/admin/users/groups-roles.md index ffcf610235c72..bea59a6d15386 100644 --- a/docs/admin/users/groups-roles.md +++ b/docs/admin/users/groups-roles.md @@ -24,7 +24,7 @@ Roles determine which actions users can take within the platform. | Manage **ALL** Templates | | | ✅ | ✅ | | View **ALL** Workspaces | | | ✅ | ✅ | | Update and delete **ALL** Workspaces | | | | ✅ | -| Run [external provisioners](../provisioners.md) | | | ✅ | ✅ | +| Run [external provisioners](../provisioners/index.md) | | | ✅ | ✅ | | Execute and use **ALL** Workspaces | | | | ✅ | | View all user operation [Audit Logs](../security/audit-logs.md) | ✅ | | | ✅ | @@ -80,7 +80,7 @@ Note that these permissions only apply to the scope of an A malicious Template Admin could write a template that executes commands on the host (or `coder server` container), which potentially escalates their privileges or shuts down the Coder server. To avoid this, run -[external provisioners](../provisioners.md). +[external provisioners](../provisioners/index.md). In low-trust environments, we do not recommend giving users direct access to edit templates. Instead, use diff --git a/docs/admin/users/organizations.md b/docs/admin/users/organizations.md index 47691d6dd6ea9..b38c46cd48549 100644 --- a/docs/admin/users/organizations.md +++ b/docs/admin/users/organizations.md @@ -37,7 +37,7 @@ From there, you can manage the name, icon, description, users, and groups: Any additional organizations have unique admins, users, templates, provisioners, groups, and workspaces. Each organization must have at least one dedicated -[provisioner](../provisioners.md) since the built-in provisioners only apply to +[provisioner](../provisioners/index.md) since the built-in provisioners only apply to the default organization. You can configure [organization/role/group sync](./idp-sync.md) from your @@ -71,7 +71,7 @@ Next deploy a provisioner and template for this organization. ### 2. Deploy a provisioner -[Provisioners](../provisioners.md) are organization-scoped and are responsible +[Provisioners](../provisioners/index.md) are organization-scoped and are responsible for executing Terraform/OpenTofu to provision the infrastructure for workspaces and testing templates. Before creating templates, we must deploy at least one provisioner as the built-in provisioners are scoped to the default organization. @@ -90,7 +90,7 @@ provisioner as the built-in provisioners are scoped to the default organization. In this example, start the provisioner using the Coder CLI on a host with Docker. For instructions on using other platforms like Kubernetes, see our - [provisioner documentation](../provisioners.md). + [provisioner documentation](../provisioners/index.md). ```sh export CODER_URL=https:// diff --git a/docs/manifest.json b/docs/manifest.json index f37f9a9db67f7..ea7c01fa17998 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -481,9 +481,17 @@ { "title": "External Provisioners", "description": "Learn how to run external provisioners with Coder", - "path": "./admin/provisioners.md", + "path": "./admin/provisioners/index.md", "icon_path": "./images/icons/key.svg", - "state": ["enterprise", "premium"] + "state": ["enterprise", "premium"], + "children": [ + { + "title": "Manage Provisioners", + "description": "Learn how to run external provisioners with Coder", + "path": "./admin/provisioners/manage-provisioners.md", + "state": ["enterprise", "premium"] + } + ] }, { "title": "External Auth", diff --git a/docs/tutorials/best-practices/scale-coder.md b/docs/tutorials/best-practices/scale-coder.md index 9a640a051be58..9b248a6339692 100644 --- a/docs/tutorials/best-practices/scale-coder.md +++ b/docs/tutorials/best-practices/scale-coder.md @@ -141,7 +141,7 @@ maintenance window to minimize disruption. ### Locality We recommend that you run one or more -[provisioner daemon deployments external to Coder Server](../../admin/provisioners.md) +[provisioner daemon deployments external to Coder Server](../../admin/provisioners/index.md) and disable provisioner daemons within your Coder Server. This allows you to scale them independently of the Coder Server: diff --git a/docs/tutorials/best-practices/security-best-practices.md b/docs/tutorials/best-practices/security-best-practices.md index 7fc360616d302..c6f6cbe13a5c8 100644 --- a/docs/tutorials/best-practices/security-best-practices.md +++ b/docs/tutorials/best-practices/security-best-practices.md @@ -161,7 +161,7 @@ provision: ### Authentication -1. Use a [scoped key](../../admin/provisioners.md#scoped-key-recommended) to +1. Use a [scoped key](../../admin/provisioners/index.md#scoped-key-recommended) to authenticate the provisioner daemons with Coder. These keys can only be used to authenticate provisioner daemons (not other APIs on the Coder Server). diff --git a/docs/tutorials/best-practices/speed-up-templates.md b/docs/tutorials/best-practices/speed-up-templates.md index 046e00c8c65cb..91e885d27dc39 100644 --- a/docs/tutorials/best-practices/speed-up-templates.md +++ b/docs/tutorials/best-practices/speed-up-templates.md @@ -83,7 +83,7 @@ config option. You risk overloading Coder if you use too many built-in provisioners, so we recommend a maximum of five built-in provisioners per `coderd` replica. For more than five provisioners, we recommend that you move to -[External Provisioners](../../admin/provisioners.md) and also consider +[External Provisioners](../../admin/provisioners/index.md) and also consider [High Availability](../../admin/networking/high-availability.md) to run multiple `coderd` replicas. @@ -165,4 +165,4 @@ directory. Ensure that this directory is set to a location on disk which will persist across restarts of Coder or -[external provisioners](../../admin/provisioners.md), if you're using them. +[external provisioners](../../admin/provisioners/index.md), if you're using them. From d3453b1d46ebfa63216d32dec926055b5b5230db Mon Sep 17 00:00:00 2001 From: EdwardAngert <17991901+EdwardAngert@users.noreply.github.com> Date: Fri, 21 Mar 2025 16:42:04 +0000 Subject: [PATCH 04/10] fix table formatting --- .vscode/settings.json | 5 ++++- docs/admin/users/groups-roles.md | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 93b329f8a21a5..f2cf72b7d8ae0 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -57,5 +57,8 @@ "[css][html][markdown][yaml]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, - "typos.config": ".github/workflows/typos.toml" + "typos.config": ".github/workflows/typos.toml", + "[markdown]": { + "editor.defaultFormatter": "DavidAnson.vscode-markdownlint" + } } diff --git a/docs/admin/users/groups-roles.md b/docs/admin/users/groups-roles.md index bea59a6d15386..a748eacbc9886 100644 --- a/docs/admin/users/groups-roles.md +++ b/docs/admin/users/groups-roles.md @@ -24,7 +24,7 @@ Roles determine which actions users can take within the platform. | Manage **ALL** Templates | | | ✅ | ✅ | | View **ALL** Workspaces | | | ✅ | ✅ | | Update and delete **ALL** Workspaces | | | | ✅ | -| Run [external provisioners](../provisioners/index.md) | | | ✅ | ✅ | +| Run [external provisioners](../provisioners/index.md) | | | ✅ | ✅ | | Execute and use **ALL** Workspaces | | | | ✅ | | View all user operation [Audit Logs](../security/audit-logs.md) | ✅ | | | ✅ | From 8055b0c9abd60ef9480f4f33714cbe4bcad12265 Mon Sep 17 00:00:00 2001 From: EdwardAngert <17991901+EdwardAngert@users.noreply.github.com> Date: Fri, 21 Mar 2025 16:43:43 +0000 Subject: [PATCH 05/10] fix rel link --- docs/admin/provisioners/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/admin/provisioners/index.md b/docs/admin/provisioners/index.md index 55527d28400ca..e636956ef3a38 100644 --- a/docs/admin/provisioners/index.md +++ b/docs/admin/provisioners/index.md @@ -239,7 +239,7 @@ Provisioners can broadly be categorized by scope: `organization` or `user`. The scope of a provisioner can be specified with [`-tag=scope=`](../../reference/cli/provisioner_start.md#-t---tag) when starting the provisioner daemon. Only users with at least the -[Template Admin](./users/index.md#roles) role or higher may create +[Template Admin](../users/index.md#roles) role or higher may create organization-scoped provisioner daemons. There are two exceptions: From 53a28a458b6b682352acb5a3e4de053e42efd674 Mon Sep 17 00:00:00 2001 From: EdwardAngert <17991901+EdwardAngert@users.noreply.github.com> Date: Fri, 21 Mar 2025 18:32:23 +0000 Subject: [PATCH 06/10] add sections to manage-prov --- docs/admin/provisioners/index.md | 4 ++ .../admin/provisioners/manage-provisioners.md | 71 ++++++++++++++++++- docs/manifest.json | 2 +- 3 files changed, 73 insertions(+), 4 deletions(-) diff --git a/docs/admin/provisioners/index.md b/docs/admin/provisioners/index.md index e636956ef3a38..d252d4904839b 100644 --- a/docs/admin/provisioners/index.md +++ b/docs/admin/provisioners/index.md @@ -390,3 +390,7 @@ address. If you have provisioners daemons deployed as pods, it is advised to monitor them separately. + +## Next + +- [Manage Provisioners](./manage-provisioners.md) diff --git a/docs/admin/provisioners/manage-provisioners.md b/docs/admin/provisioners/manage-provisioners.md index 6baa76862a42b..74c7e0d1bbcf3 100644 --- a/docs/admin/provisioners/manage-provisioners.md +++ b/docs/admin/provisioners/manage-provisioners.md @@ -1,11 +1,33 @@ -# Manage Provisioners +# Manage provisioner jobs -## Manage provisioner jobs +[Provisioners](./index.md) start and run provisioner jobs to create or delete workspaces. +Each time a workspace is built, rebuilt, or destroyed, it generates a new job and assigns +the job to an available provisioner daemon for execution. -View more information about and manage your provisioner jobs from the Coder dashboard. +While most jobs complete smoothly, issues with templates, cloud resources, or misconfigured +provisioners can cause jobs to fail or hang indefinitely (these are in a `Pending` state). ![Provisioner jobs in the dashboard](../../images/admin/provisioners/provisioner-jobs.png) +## How to find provisioner jobs + +Coder admins can view and manage provisioner jobs. + +Use the dashboard, CLI, or API: + +- **Dashboard**: + + Select **Admin settings** > **Organizations** > **Provisioner Jobs** + + Provisioners are organization-specific. If you have more than one organization, select it first. + +- **CLI**: `coder provisioner jobs list` +- **API**: `/api/v2/provisioner/jobs` + +## Manage provisioner jobs from the dashboard + +View more information about and manage your provisioner jobs from the Coder dashboard. + 1. Under **Admin settings** select **Organizations**, then select **Provisioner jobs**. 1. Select the **>** to expand each entry for more information. @@ -13,3 +35,46 @@ View more information about and manage your provisioner jobs from the Coder dash 1. To delete a job, select the 🚫 at the end of the entry's row. If your user doesn't have the correct permissions, this option is greyed out. + +## Provisioner job status + +Each provisioner job has a lifecycle state: + +| Status | Description | +|---------------|----------------------------------------------------------------| +| **Pending** | Job is queued but has not yet been picked up by a provisioner. | +| **Running** | A provisioner is actively working on the job. | +| **Completed** | Job succeeded. | +| **Failed** | Provisioner encountered an error while executing the job. | +| **Canceled** | Job was manually terminated by an admin. | + +## When to cancel provisioner jobs + +A job might need to be cancelled when: + +- It has been stuck in **Pending** for too long. This can be due to misconfigured tags or unavailable provisioners. +- It is **Running** indefinitely, often caused by external system failures or buggy templates. +- An admin wants to abort a failed attempt, fix the root cause, and retry provisioning. +- A workspace was deleted in the UI but the underlying cloud resource wasn’t cleaned up, causing a hanging delete job. + +Cancelling a job does not automatically retry the operation. +It clears the stuck state and allows the admin or user to trigger the action again if needed. + +## Troubleshoot provisioner jobs + +Provisioner jobs can fail or slow workspace creation for a number of reasons. +Follow these steps to identify problematic jobs or daemons: + +1. Filter jobs by `pending` status in the dashboard, or use the CLI: + + ```bash + coder provisioner jobs list -s pending + ``` + +1. Look for daemons with multiple failed jobs and for template [tag mismatches](../admin/provisioners.md#provisioner-tags). + +1. Cancel the job through the dashboard, or use the CLI: + + ```shell + coder provisioner jobs cancel + ``` diff --git a/docs/manifest.json b/docs/manifest.json index ea7c01fa17998..575e7aaf8bb71 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -486,7 +486,7 @@ "state": ["enterprise", "premium"], "children": [ { - "title": "Manage Provisioners", + "title": "Manage Provisioner Jobs", "description": "Learn how to run external provisioners with Coder", "path": "./admin/provisioners/manage-provisioners.md", "state": ["enterprise", "premium"] From db7c891d24dd0317d56606e786a258f0d71d16c5 Mon Sep 17 00:00:00 2001 From: EdwardAngert <17991901+EdwardAngert@users.noreply.github.com> Date: Fri, 21 Mar 2025 18:48:17 +0000 Subject: [PATCH 07/10] fix link --- docs/admin/provisioners/manage-provisioners.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/admin/provisioners/manage-provisioners.md b/docs/admin/provisioners/manage-provisioners.md index 74c7e0d1bbcf3..99ed609a6d611 100644 --- a/docs/admin/provisioners/manage-provisioners.md +++ b/docs/admin/provisioners/manage-provisioners.md @@ -71,7 +71,7 @@ Follow these steps to identify problematic jobs or daemons: coder provisioner jobs list -s pending ``` -1. Look for daemons with multiple failed jobs and for template [tag mismatches](../admin/provisioners.md#provisioner-tags). +1. Look for daemons with multiple failed jobs and for template [tag mismatches](../../admin/provisioners.md#provisioner-tags). 1. Cancel the job through the dashboard, or use the CLI: From b20026d5806a73ffb2a91da7dd1ee43e004547bf Mon Sep 17 00:00:00 2001 From: EdwardAngert <17991901+EdwardAngert@users.noreply.github.com> Date: Fri, 21 Mar 2025 18:55:16 +0000 Subject: [PATCH 08/10] fix link --- docs/admin/provisioners/manage-provisioners.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/admin/provisioners/manage-provisioners.md b/docs/admin/provisioners/manage-provisioners.md index 99ed609a6d611..05d5d9dddff9f 100644 --- a/docs/admin/provisioners/manage-provisioners.md +++ b/docs/admin/provisioners/manage-provisioners.md @@ -71,7 +71,7 @@ Follow these steps to identify problematic jobs or daemons: coder provisioner jobs list -s pending ``` -1. Look for daemons with multiple failed jobs and for template [tag mismatches](../../admin/provisioners.md#provisioner-tags). +1. Look for daemons with multiple failed jobs and for template [tag mismatches](./index.md#provisioner-tags). 1. Cancel the job through the dashboard, or use the CLI: From 5714e88d382013486e3bd9e703b2139097554dca Mon Sep 17 00:00:00 2001 From: EdwardAngert <17991901+EdwardAngert@users.noreply.github.com> Date: Fri, 21 Mar 2025 18:57:33 +0000 Subject: [PATCH 09/10] add manage provisioners to intro --- docs/admin/provisioners/index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/admin/provisioners/index.md b/docs/admin/provisioners/index.md index d252d4904839b..a8a319461e1f7 100644 --- a/docs/admin/provisioners/index.md +++ b/docs/admin/provisioners/index.md @@ -32,6 +32,8 @@ Provisioners are started with the the [full Coder binary](https://github.com/coder/coder/releases). Keep reading to learn how to start provisioners via Docker, Kubernetes, Systemd, etc. +You can use the dashboard, CLI, or API to [manage provisioners](./manage-provisioners.md). + ## Authentication The provisioner daemon must authenticate with your Coder deployment. From d1842a3be13d488c2d18e6a1d279a2547ac15dab Mon Sep 17 00:00:00 2001 From: EdwardAngert <17991901+EdwardAngert@users.noreply.github.com> Date: Tue, 25 Mar 2025 15:55:00 +0000 Subject: [PATCH 10/10] rename to manage-provisioner-jobs --- docs/admin/provisioners/index.md | 4 ++-- .../{manage-provisioners.md => manage-provisioner-jobs.md} | 0 docs/manifest.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename docs/admin/provisioners/{manage-provisioners.md => manage-provisioner-jobs.md} (100%) diff --git a/docs/admin/provisioners/index.md b/docs/admin/provisioners/index.md index a8a319461e1f7..ac8cbfb48b39b 100644 --- a/docs/admin/provisioners/index.md +++ b/docs/admin/provisioners/index.md @@ -32,7 +32,7 @@ Provisioners are started with the the [full Coder binary](https://github.com/coder/coder/releases). Keep reading to learn how to start provisioners via Docker, Kubernetes, Systemd, etc. -You can use the dashboard, CLI, or API to [manage provisioners](./manage-provisioners.md). +You can use the dashboard, CLI, or API to [manage provisioners](./manage-provisioner-jobs.md). ## Authentication @@ -395,4 +395,4 @@ separately. ## Next -- [Manage Provisioners](./manage-provisioners.md) +- [Manage Provisioners](./manage-provisioner-jobs.md) diff --git a/docs/admin/provisioners/manage-provisioners.md b/docs/admin/provisioners/manage-provisioner-jobs.md similarity index 100% rename from docs/admin/provisioners/manage-provisioners.md rename to docs/admin/provisioners/manage-provisioner-jobs.md diff --git a/docs/manifest.json b/docs/manifest.json index 575e7aaf8bb71..a343da589ee31 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -488,7 +488,7 @@ { "title": "Manage Provisioner Jobs", "description": "Learn how to run external provisioners with Coder", - "path": "./admin/provisioners/manage-provisioners.md", + "path": "./admin/provisioners/manage-provisioner-jobs.md", "state": ["enterprise", "premium"] } ]