From 44a4d428f2551092bcfd73660e1f1d4b5e557ca6 Mon Sep 17 00:00:00 2001 From: Joel Speed Date: Fri, 12 Mar 2021 12:22:42 +0000 Subject: [PATCH] Add externally managed annotation and predicate This adds the externally managed annotation that can be added to any InfraCluster resource to mark it as externally managed. InfraCluster controllers should leverage the new predicate to filter events from resources that have been marked as externally managed. This will prevent them from reconciling the resource. --- api/v1alpha4/common_types.go | 8 +++++ .../providers/cluster-infrastructure.md | 2 ++ .../providers/v1alpha3-to-v1alpha4.md | 19 ++++++++++- .../images/cluster-infra-provider.plantuml | 4 +++ .../src/images/cluster-infra-provider.png | Bin 38329 -> 41874 bytes util/annotations/helpers.go | 5 +++ util/predicates/generic_predicates.go | 32 ++++++++++++++++++ 7 files changed, 69 insertions(+), 1 deletion(-) diff --git a/api/v1alpha4/common_types.go b/api/v1alpha4/common_types.go index 352a81bf1537..d699bcf164f6 100644 --- a/api/v1alpha4/common_types.go +++ b/api/v1alpha4/common_types.go @@ -83,6 +83,14 @@ const ( // InterruptibleLabel is the label used to mark the nodes that run on interruptible instances. InterruptibleLabel = "cluster.x-k8s.io/interruptible" + + // ManagedByAnnotation is an annotation that can be applied to InfraCluster resources to signify that + // some external system is managing the cluster infrastructure. + // + // Provider InfraCluster controllers will ignore resources with this annotation. + // An external controller must fulfill the contract of the InfraCluster resource. + // External infrastructure providers should ensure that the annotation, once set, cannot be removed. + ManagedByAnnotation = "cluster.x-k8s.io/managed-by" ) // MachineAddressType describes a valid MachineAddress type. diff --git a/docs/book/src/developer/providers/cluster-infrastructure.md b/docs/book/src/developer/providers/cluster-infrastructure.md index e8b69743bf77..ff80e348f660 100644 --- a/docs/book/src/developer/providers/cluster-infrastructure.md +++ b/docs/book/src/developer/providers/cluster-infrastructure.md @@ -45,6 +45,8 @@ The following diagram shows the typical logic for a cluster infrastructure provi ### Normal resource +1. If the resource is externally managed, exit the reconciliation + 1. The `ResourceIsNotExternallyManaged` predicate can be used to prevent reconciling externally managed resources 1. If the resource does not have a `Cluster` owner, exit the reconciliation 1. The Cluster API `Cluster` reconciler populates this based on the value in the `Cluster`'s `spec.infrastructureRef` field. diff --git a/docs/book/src/developer/providers/v1alpha3-to-v1alpha4.md b/docs/book/src/developer/providers/v1alpha3-to-v1alpha4.md index 2b457a952399..267b4e3a6398 100644 --- a/docs/book/src/developer/providers/v1alpha3-to-v1alpha4.md +++ b/docs/book/src/developer/providers/v1alpha3-to-v1alpha4.md @@ -3,7 +3,7 @@ ## Minimum Go version - The Go version used by Cluster API is now Go 1.16+ - - In case cloudbuild is used to push images, please upgrade to `gcr.io/k8s-testimages/gcb-docker-gcloud:v20210331-c732583` + - In case cloudbuild is used to push images, please upgrade to `gcr.io/k8s-testimages/gcb-docker-gcloud:v20210331-c732583` in the cloudbuild YAML files. ## Controller Runtime version @@ -251,4 +251,21 @@ with `cert-manager.io/v1` `MachineDeployment.Spec.Strategy.RollingUpdate.MaxSurge`, `MachineDeployment.Spec.Strategy.RollingUpdate.MaxUnavailable` and `MachineHealthCheck.Spec.MaxUnhealthy` would have previously taken a String value with an integer character in it e.g "3" as a valid input and process it as a percentage value. Only String values like "3%" or Int values e.g 3 are valid input values now. A string not matching the percentage format will fail, e.g "3". +## Required change to support externally managed infrastructure. +- A new annotation `cluster.x-k8s.io/managed-by` has been introduced that allows cluster infrastructure to be managed +externally. +- When this annotation is added to an `InfraCluster` resource, the controller for these resources should not reconcile +the resource. +- The `ResourceIsNotExternallyManaged` predicate is a useful helper to check for the annotation and the filter the resource easily: + ```go + c, err := ctrl.NewControllerManagedBy(mgr). + For(&providerv1.InfraCluster{}). + Watches(...). + WithOptions(options). + WithEventFilter(predicates.ResourceIsNotExternallyManaged(ctrl.LoggerFrom(ctx))). + Build(r) + if err != nil { + return errors.Wrap(err, "failed setting up with a controller manager") + } + ``` diff --git a/docs/book/src/images/cluster-infra-provider.plantuml b/docs/book/src/images/cluster-infra-provider.plantuml index 489d660c8aa8..b6b0d129b1c5 100644 --- a/docs/book/src/images/cluster-infra-provider.plantuml +++ b/docs/book/src/images/cluster-infra-provider.plantuml @@ -4,6 +4,10 @@ start :New/Updated/Deleted resource; +if (Is Externally Managed?) then (yes) + stop + else (no) + endif if (Deleted?) then (yes) if (Has cluster owner?) then (yes) :Reconcile deletion; diff --git a/docs/book/src/images/cluster-infra-provider.png b/docs/book/src/images/cluster-infra-provider.png index 28742fe9ca481873535a3fbbb4d34c8c68a3bb08..5ef8f5f0bf6bafd85e2d6b928ebf360b4f6dc7ec 100644 GIT binary patch literal 41874 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

v`iOcxxa}YuqY(#D2~8NzN6- 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 literal 38329 zcmZ^L1z6Qh_pKs`g2G8S4&4pXpfm!~-QCjCN;lFS(v5(0-2vbC`^UYP z=RxqC-AChwv`m8hP;HV2NMNARO5XZhj)E+zWzmpZ^qdLjk zrF>0DrPNe8&Y_^oJF4_{YuYdQQ`;S#2J{3sH}zAw!Vf`g@rwperz4~8FU2gG5>69R z#Bc%G5=B97Ub8WZRIzW|i3{a4-y;ss4NqMR;?`JDap*REHpz_LY&?B&Au)pLK_BW| zp@mW#QI+%|V(iGB$zK|w2DU`BVY=RwrD2>aPmief=RW@ql{stWDQSPp8R0Kh`5SKB zwqNuZUbe0%BdZhb@2p6;VWCZ(FZLy~hnIE^ANyAg4~}35b!^(&A#6Hrr?IrX(2j-) zkMcp#?8RE-t+Y{1)o@SU& zXbc$MkglqTSYhtXjhA)2jV13kL=PdkWJ7SAeL?Yx*z-y2clH+(l-z`m9(g|!7ZyN)rl0b>>upf!XDVtgWG#h!DxUxNz_z3h>jw3XBxy=YK6PXH<}{si`?UJXBX#r!ka|eE8@eWH@+u zoPr$XB9)Hz_OH<*Vwm?Ge!R^HLL)B>n3B&D_4D&9kM8hLfAGa+KygXQxRAx!{`{wp zA6whnR#sMykB)o=3H?I|@7?r{=-rs|Y>lOmpy0<(pE%ygn3++HMu@lwLLi6&a?&W~ zdU^udYBj{vkY~a~D7|P8y)AV2_Db-y&&rFK&$_Gprb>Cr~M^9 zZ*t$-Q+W6QU*F#!8vp$HlbJ~rO@8k=*rwtA`G#?!-QE~#AGHTtBa133D%dP%@_Q#= z;&KWL3qJyn0e5A;o2|80#VGHKqu*%81ZLekDVW86U25%u)8)v(zbt+q_Tk0x&0lQ+ z`dwkl{$-`5rTq}bLkzDOpZf)nzU{c)pHS9(S!mc7i;&7%?y#k>eWm{3&Et#T%h9O?f;E|Ea&^TQ4tTh z?I0sVLogS!s zf4{)M_lN`!y<7UD^2ip!zw`2u?x{`h5TYSb4awE&`0pnaM1NPmShz3yg%Ra zwDhxKn1;KHGfObs!vM?*1L8vJI!|BdM%6bQ4v4X|P~w#GTSyeSqA(zfjNmg@Y2hcqT}u+-W%UF`pJ?;C`^4p-j_03riM_2EH~3 zw841VMdp;mU!tcJl2K=cm#2F7!R4T4IX-W%EBuzWZ3QJQ1}jO;~m zk4?gWB}M9|6rMxP?HQtFuy~lzc~BR)r@WrBdIk7P<*^;E9ix@$V0?dHZ9atmrta%_ zxb=Fw<)(KFiV)}&Le)dJn#7^lCT0Wo^u43y(Ef&jY%=|Ad4Q_HWnkeRO-Nr*F`XX_lMeZ3dG0dUz)c}#np?)O_q0}k`he* z=wa9J@g@v0mJdA-r=y~RF(f3w9ASUHUb@0oMb8!Ey^g0sPuwYAf}8cmXl-rHr{cb+ zm|ISd1bvnzK59>XP2?i_hOgtY*B^>?o&I@Sh7R#F3$7H;bCy3}U6b|uElpayMj}^N z4Se_s&=LCj`cRVYn`vAw;TueSi(kTB?78957e!V*2SVQgrKfq{`hd_O9yqCe*xW|LMVzMEE~76t~{ z13hLgr&V2>oZ(uGZ{Lf71Io^h$5C%W#MfiTzGn2yTGytqSsDoZ@U-ks^;EN!g498~XLMUzTcJ?s z(a{k&Y>Ci8nEJ%OyE**w>dd;Zgv@gQJKVZCA%i+FrgyK>_+w_~x04;Lq=ag2&ueFb z8kNt^^fK4yD?~U+wF3j19=8|1 z0m$~IhP74)$$a><`-$jzEG9pfIzyE-c->-UDH+_5Uj1Ik5Ne?mrJ=Q0Y|fO7dl?&B z(sF5r?Pj8(R%MdtC$dwjUE;j^+o-n1hR~=t8l|e)aR)PsjAOCMEq>3LN#TngTn|F0=%b9Gk@WEfdb`oMRFvQ~M z9BV5oEG7pdF*l2(VkIZSR?AcQ`1W_W%JjvkC49`J59=uSEjELZ2nh+f@#uMYn)36X zp&)>H6CjA?-55yPJ-91TQry|tV1>4O^W8~N&<-SX*eAzLN@>&?^cXidm1M$w^eHf1 znQ!ojUn^@#rL&T<#?QRPKY=R}DGur5|H$&1wpgdhTU{2h|8i#%`7M`MyVYV|xTWi* zbvQmgCH0m5;j-+;UUQ|Xt65mo>mb&D-W@yo9m%!V}OKY~X+m?m1J2skW^;5(!eiR5M z@L6Dtm74Xu#Lig3&CQj1q;yG23eu>aA$z)CcDAL|ERWOf(m_iakLR_VMk-iNc1KPc z=Ph@dE9>h-*54H?Q26Z0g4KCFI3r!H`($lr z(CFKh351GyC;a*;8j4*3pOcDNDTO$OV-#yDV8@e$=0o6q{yTg#u>Tvip*R_dfsvX( zMPyycOo-*|gcevxh=uFZQH8m2^v6Zg+wDPtL1-zow3@RsPT3)Z30svpB_L3BMb0(N zyZ~v$y`@apDo~Q@zA+EI$;PYFff(u_W#`w-Mn5}4b;GgO`1^>(W=5G#OcLq@jf`lm z7kS%HJ!Mi?E8H+J?c(bi`UQqk*O>dpenjqeRO}Qu_pSR*z{B5tIM5L_Tnic*k#gd( zul&O5@;Wx5Sjj5qL#5}j_jG5Y;roEmG35&XvWojdyzenhP|xc)k-F1V=w^^>pofU z7^3TW;UDXDI~^7KKcN6m{{D1ch{woLy`!$UjK0x+2WsJT!>8uv zX-pXeCK_h-f;lGYG(J9=8`Wj%lfmO-V)TEl zN1>)Kkma?_v{3XxgMw_VtyrsiTk=$A_xCUSi}QZN31qxEXK*@!^W^TD*+=0^fLb9d zdETwkQREqP&G6r~Jny7mXjQYg?4ZQg))Y8-uuk24iNG_FASt+S)=@6uQhe z24gH_P|>_{tQ50Ek+__yGHJvInKM&Os{c;NG@%L6Xq723>DA&Q7^(czFU4f@m z>msMxk&EheZ|Z;M%Mn^rgFBs?c6xWBcrn*%X2Omt*nStHeZzde@V=yOE<}uumCkcR ztlr9s`kLlxFEmJBKkA^J1(|Q4-yh-dkOR2}(Gna8B8Wy!mtu_2PoMt2CB|qeikDCa zD-Gfq?am5)-JaO}o&)hR%*`U$jIrt{=n;r@&7bGOCk-IR$?y*y>IBu{x;d?gf>?Q3 zK`p@5{k*QZ-`m#3TCWCM^ZGK1~3wbnNdum(E zeNE~%vHmLx3W~2fB)y3*t|oP=BIL)P|J71&?)qQ*w@{$bYlffhF_xn+q)yU&9* zwrm%|=t6KoSpW55y7EWm6ciMcl%nI}u<-F^_fo$7nysXF-x<6qx_QfYZmW9LW-z-u zd4|40BPLH#;rMuN&#eySO8r}8IOCaa&!|a4W0-q5_m^vk_QRS`y9r}7x1O#Wj z>9I&gV|P|}S$9KsSNCZ5;&)Zx`WJo`f*D`Ger2Gh4yngtWMmwBc|^d0%E$J@cHqXwCO@leaGn^oz;!-xnNm z(kG3(J|G6&B0S{!Ul8hFeW&E3j}DrO+>KIgL;knKzy;ax=W6UeITh6Mc2y1Ci{H4UE(Ap$vt+&|5P3o^Gb|{U9L=J5#sy%PXDd?p!&5# z2%X5(;MD(5-I1C2((oMn?DVaa!vkEAt}zM>c-?+9;Qyb8663{X4aDc?<**-$BN7$y z(;lwZ7p%2YwVe>CeO^hii^3-SLt)5S1~Wt($sAMF1xhkGu6u8Nu{vh;It&J71ZyqM zbHc9m4X(7SE z5)u->JMHeP^ZeMDhzLDn(49Bb+w8VQzs@S_VV(grlvMG-^tD}^Yy*VGBnNyA-x)xmtrlBrYvX0QEq;htxj8vooVqa?G%0Q(B5<^g z9}ZimrsCC2jf_-OR74Ta4i?$j*#qwQ?^kQ^>gsCynjIP{Dw%9*zmpn3bjE4RwCYeH z5C)T<=^)YA0O~H0C$?)&hXeQ)I2?TD~&qM=fQt3Pj+_W ze_vl5KNlQI;~N?nAbmQCqWj#a+E11=3ivP~(9zNH#iFc-lQd{_a*i-`h!B5RgS0G^>|q&jDj&w1uxkA?ZjyQ zxLc=D1~prLy?)p%0%=zOseD{=Z6jwZuD^cEoN8l#iRTwERvm;|L1~At+Y&1J z0tQ;Gik>rbA*{tyGuEuAv?smLl4fW&6R!?3a4ET;Gav;L7oWZSQyw#;c35`AMi6*; z-hZ=GW?_9mPr{xX1F#?(>Z`1os|vhFqktQ#Etf%9K!^~FpC zKFsBOYs;+4%0H~H40*g9vXUguVbV@OpyK98PMii4Lxd@k@w%zdJ!0oHg(*6QUCu&p z_!3lSE;!V;$_r1AAVvMsTK;9pw#T3TLGH}-^fKO&v`VWB)4{eA$)V(HNT@%xM#fvs z&e@Ai-e=M8d|ScgJW{631-8>GO3dEtYUQGJuiJ$5_fL${zcp&PrmKlJi`LV6@qV zQ%h(m1w|7@p9Qh~6Qg=GN1L2nF3L{Yw#oeGA^FD$?L>9}4iHQ?3qg=w?c(yvSoKh+ zWf5;iRsW=m_@pCH3#?>F{z+M8W@h7VvRW5M{k!Qxcf*FS0QEZm^sgNr!35b^(Qvvb zbztui%2jK?5^87DoCkN`*GxVLy&ua!LoiU*(hWmoblAexG6)4?^Fz-H0$5Mpu5I`+ zJ*oZ&w9359*-c2BSmf;=rs~tZ=K0%7zUx0hq`lA}T_JkpvNu3hPWVIy82cL|;y$ZW zkk~t;CsUc`&!PA?mgFr^;#7KS`VI~0E#L^nmXRZBmuK8su8H~=XMg$f1)OL9eAWUt zp)PTu?DLm?h7(3maa~8`|tMUaA|2F{Dg)54SiycZ(4E-yFUuW(5 z-1{)lZ&l*lHGS)#hlVzVQCrZBLQ_Xa<^@`iFl;5!|9%vmvT#d|Ok!mLFJKE5;(I?C z`4bKX>t_wzNL7+-+)Phfj^NL%4=WSg-lw+_wVA4sWD=sOOQbbJ;O z0@|2rQC_MO;ldxy%5q}#{`AEgQg?5d2U^ZWNXukRz<|VbsP7kjd+sg8zTb_(UW6Endm%F|ni&LsG)!|zi7K9LCMIgR@ z14YSk#4Qr1OH+KF2V&LhB2iJ%+uK`k*iTGMh>MH&_ZF#^adL9jm<+e}^lZ&kn+H-q z*yw;<9ysC}u8g3htGg%`j(7NhTT@fhD5t2XsJ7M_0BT2TedIF9f!}}w0=3?CK|(0T z4T{Oa;)$76DCMZBs7!u!gkW`ccJ@m!GXo%U2|O>$1=jhP_zYUGL) zB~s~;Cxi2m=tIJ0*_^8rlIVSDB&`&!Tc)EeEsb-wIn2TB?lC@As>`>u%=A?}s?&l~ z8H*&Yh|Gk9@X~cdroL$BYbtU*Eti-0HdcEc1S2xe~LNEuClP`6f z5~a))6rEqa6 z^&Pb>2Sbq;-+rhnO>3l*=x+WNb9{bjDO}JThD>aC!er+-Z&tfDtkaJ039X0uCD(wG z-IOpDx0>7Gvao2U4i^{BdJ(|1`uja()9|>Q>0B@WFe)o1y&b-owZ1#ql-C)LkA9uc zgcdy)sqz%Aq$K}sVsurBEWW1Gr#gFbMnZB!bhd>B-Rl$8)1x(e3g#;RSj}210rF*l zMFj;N#?toTad&61q8mvmfNC6%w|~u!9UvA;Tj{*K_E%>I>MExJOwP`k3wFcTZK@$K zXP?ySNx?L#A{W)a7gN zL(IeD{w8T;22c!1NoGSb3T8R*PhC!qp?M9QUZp_a*@1CS-=kwR!?w9bjLHh*Av)us zqb&zEtLsFVgYF2qdL5%E*P~SmS|ycK1~xX8t@J8&Tial!CyHal8TC_q-+7$cYChv; z!2Pm~TYecb5(Xk+8F9m_?-|4kQoWC>93%s^o`h>@*UnhFeEvhAvIbXJ?bz_`+atT> zqa%wR%iC*ay`2fePfwfpKtPItiD~uz=!1#J$D8?9phtHLdI4hGn)St3ABi-JbkD;M za>=-Q#cv~a;dm)nw27w!?9Ax88PxW2qzBxL^4Pp)RyH;a0d3;a(jX;74-$5CHQxXP z25vMr-p>)$UZRJ2*RGyDdbK4`+>5AG|Ff@qN>W~eZm=|&&+7=_4nwKW?d(2wCl%$g znMNL;Ee_?%6(_z2u&7O45jpCok`MN02y_v@eEAq+#N$&3J z3N=klE${u4x;?K3^7MqFXfHdi%Q9PMm!bqozVjpHzF zoxaEdaG46OVJ7v?OWcL~y&xx_Od!J4K~*{MHyUph*4S^nMBf<1uMSQtLo-_a>7 z0#4iLWnfE2qel_Yrt$QtLh>c>s%Cx~W<}Ha0JH%dws6oBr1I=mv@pp+~J@oMS%(+D*(r~j~cF6 zalabR@#rNeU1luUmp{>495zHiGS@Epb+4OL?i*c<7Fpdk2R(6qR!b;HC}JJWr2w|4 zRxmVu)*?`;MWMzhV%(_}Ilq3h-o$8d;ac$%1E*@Bb*`y>h{67Bq_y#;O~uM!ISL&W z6%_?VzUAI7c0-i9OYA!S;z8n5{PM)Oxa8#imBY7&LYK!a2CH~6lqfl6R&CJ&U&`K<~yyV8?z@~;)d6gBg0w62(N(9jf1#?fKXX}$N%{9rO!s;!|h zGn^$BfQ-M;=yDABRxuF~#ulr^=J|<<8u2JH?FOflv$IJltAZB=Bn8|BN;~WlK59*Q zG(@WO#8`pj)a~0^ejJ>fqQb%qeSqG!cXrP617HX|JiOw25_0mht`HIvRjkj=l`BA@X4q@-pB3}h*cmD z8dp*SvH4)3DF6v4Hto)6?eiokNcT^6CZ{8EE{->_Ffe$$Zn@dna+$eW(wQBA=m0_ddm4y~or3rASrOK#EiJ3tmo`pXMRw zdG`QPm~tfsDfb{yhe?H3V{1O(6d?V*Pm&4>+UcU8GoLfn45@dI!YFj2esuA$W!QlH z_96Sca8~Fq|FuWAj7rxAhf}!PCb-5X17U^b zRlEt;+WWg{ir4=bsH6y(QbA>ra;ld~S&svr4mC7#VRyi^3qH)DSz*hqeGr{b0!3)~ zn;v!?pDomX%+Gg1U)1A9%P+tmY;}14Z)4`bsPlnpo7v%by2t;vA-!CHM)p!kujfEU z#Ps3RgMm7V0?0EOLnj+`*htdV8CzLxzbZx}RhFs;P;=gD-*}{IiBu=0TQu=-g=n-j zf>G@O+$r_d*3jSfeYF+*LXu~%@mUjbo{!qz@Se~|0Dc6`ll|b+yEN-@Qk11bBvFNj z?!cF}F15E?q3O!z;wSE`+q#~F$DLVGhdrvFLb7V82Tt$yYchBYVA{e##>0@{?I*XH)Bo2EV&ap{87$3C}%Cvc=>&!oK( zQHu)%0`Ewu=;^&K|9}&yTrWwhc1;PUizoJRDT5I6_T*9Gi{)Az4=Pf{w$N}r!c%}g z%hURk&PspyK#F9gO7FD1gRyG!FNYfx##ukO#YgS*b4zz>8y?yBb?!WU;7Tp-kIGks zfqeNron79LtEz082{WmRd2(4Rqt;*B!%Uq+Yw=SXzG7gLZRKa}#0m#-IP3#*c*%`H zsHSC*RIK_nis_0g4Y{m-X!v776$WRX+6<5B0@!aFP2sP^YV1DS#mB_u6@`^*N^I?< zPVMRUb9n!-BJm5tf5c?&*NKfUB(STSM?dOvYutfs!({mtQS&CB6Y4dclNDAfRNu+* zjyx;@p5c`~eAmzli(Me%hDq)rBYJzP7UnBc&iG5&-wd<~`u&XMi+rZyc6Jr~1OU1P zd^5j=_GWj#GJtz+I9`3mrOVAFfDYOXu<-hSocgeHIE}W^)>PH?l4EGbnkTmHS9WeL zCMIUEFcEHj>{v!nyF0V-4=wt0oEM$gi%x>VXR<7#=dWO))K>FZQH@p9kmej7r(RCJ=XgbUISjX?xR|Ea+Us~T8Gt$VGklNdGOXKWN z{PJ#`TF%AgOI4n1IIRZDKx?MsWa$K#(+AatvSp;tBqY^Mg&WV>&FVG)BQs;+dF_S6X|urxGl&3~r*NQqI=tjbkb97`icclSii znT3~r?;#DRFf}!8;5+{w*4p@&_Qu%I$`SSMiBWbZI(_ z>3n@hw)mj)0bcC1|En9t?U?xf20m zfBNMQ4{Ng4QDEdmvqw^Qw{9vohwHx9pFdmr==ZMRUnih#ps~ktnY@e??|D(m>tQiE z>g9HQ{!V=wKLpE*(|Mny<4K3x*)41ZH{b+c>*mF;!)YWpw%eqbxBO3oLab zB4urL9XyiIFjALIvomGSPle7VHrP5L#eUA8<~ zF$vc|x%lk2YBiRcjFvO+jMl~qh!Z?@s>M{7+9JiGtDF~1v0k0uRGY&`_tZ&*dISD( zPUOBk*ShE9n`Gf!x(AT(IR89Zr;-RoReV~`#7udhb~I6>(bs!U0x68ieDGw zJe7%;#znXXWe|;=D8Ekx*I9Em44|fer-%`1xS#m~YG_3a@kPeJji_^>UT>rbIC9Dk z+X9*nc~#jQR7H$(rj}l=Sf-ppDO&24DE?xn`H&`8*6H5fibn3F*hP;?|Gi-eY>`}v zCbfjFf9)>N*`2O*KZR+W@hF<--!}Tp)T9P7d+xM)7$ls;cVUY^RW%B}r>vI56}md% z*kQQf5e-G;%Hkg%52Yrt(>prjQ&(rr$j}WvBY*zf2Yol#zEpuY{Z%=Wvpi0DblcJr z{=s}-elfSaMxwf-n~{%e>6q8R;4OR7M{LquHt7G@REXsUR#tTPiV?qm=y)pkKNJU3 zbZbbbv3F5~mDeSIQPuy?{?uV0Z zscAo9OIoXX^2X=>ROaKOUmtv9p612-WARQC?%_Zgublmiy++_tt7FIP66WxGiOx)_ z!TF$lA-d#rbDYyf`Dzs{@A~@L_8-VSA)objgNhX<7=_v%s~SZT3x0U`R#;BL1}Jil zAd=PnRYt`H@=!Bkm4))v64mP1m_u;_l^sY@WJQ)PAD0of=KG~HCnvUn#Dvp>MP@c9 z>dGHLUlc>#QU&0d!#ev738#2yPvp={HJWT>Hk{MBVCr#?l<@jzXoAa^#Mb-mh04+VNe@+14Pi;f)vQsoj zu|HS$#8MPJBH5mvU$sY>bDh^>0ka^7XpHRHB7k0%JI`)W%U2amtUvNUfU+tBXI&PN?2T*$(~H zs-JWR^JJd>)3JN}7V`xpS0pJXB~{O^wUrO-Un(vPKD9z2X0suOXmYt~xx*t1O|t!m zji0JVJI3|~T>2v_0?f`Cd3yY?pe7@bq_`w#OC?2!8PWMzn})B|yZoLBg@x`Y(Nm?0 zB);UWv%uhoYj0JP+~o@$?Z5~ukp?=r5L4!BpwP3Sw`3>`>|PgoOT6*8+_9vX5wFJy zZOM*dDha37`7WJ~W@FSE1pl!;As9|sy(zj6@ocY-6LANRLO~8wWOC)nd3Xh9`Uu#|nKO!%3mc-#sne{|xhw?!*CtY<;y{*?jH;^#I ze?Yw&=ZR$KdgaS$Uas|Jgte`;M&Vf37D-DM2zuPY-GXnU9t&_ENi}yL=uF zJh%(bnBTZL@oj8c$R1wzX4rp2xni9=fAt0mSiE0B*WZG4M@`A6KIiPy-1cNW#-hJo zQ010i=uc>%^R_))n#^1q8&j$e&USUVPsla%QqykCDaxk5fT`UK#+!^|XkxcJ3Yo1r zqV;FK8_~Ng!?tpN@v_{Zng|^Mp!L_eDG@bjo2yy00r&}Zt3Zvwj_i9+N7((BQUSNy zOt3pg+b4kUHgeM7%Q>pudEA`GkK&NZEEXj!C1S@JKRBrR&`^kEkX^iph(P*4QU>#V zxgr!%bS!dHzt)r5$bY@zX6E85yJodO)}t!T#``ottzLr?d{I&L_VtATu1BqI%ejkV zP95EsCCUY%+cb{oOZP2SJ1!Ohf# zw}U=dX9|jnfZwnW6~cgI&LbRS4uv2dFF-QQGb?gXbM12fs~w)-?%HwtqNRBGcsTe^ zL}+Fwp7{ZhWh+Pw>q~=zf-(@6Ol!Xt-4wKbFu!)GC!^A&(xWn_vZS)7atS@e2poSh zH0iiywYu%IU4F=@)y`xo?c!4RjwF*Bo9e8wk-N~_VNazu)l1%$d%=b&;WmapUgtCFK-HXJLJ?>T%TcA^OYe z+?>t%zqk7IxLifQ)R#ow55v`J4T!hlwu>@sR=1A!O{j?cDmepjCpKB`p+17eK_ z7-c!G2h_!XAqo_})%qXbg=Zt zquBD#B^U5;ImLu+xU`h*8vSY3&>Ur7LfHnJU%JiT9<2XNdeIG&GN9!!#u5WvI)iqm z1~^Q}S7=qqPUANLwE^Io%YbFB&&DvUCvEESbQ#$%J>P~*+CchLH9CdK{~|6`gO<-c z?P=$nSaKyPD2+yA{~hAEe-G{KuPJ{F>-CjB}2dZd)!?!1^WE$UeD zS@xe4TVgiEK-Oo?fOPwCQpnGIdUWx;B-27v)W508qtFLqpmH(vnmbq)C*YjVu$a8lZ4eHViZ$_=kItt>~rvoF5iFoJ)L)YwI zd<0H+$F~CTcL0EhiH_#>xKujM(^XfmvzTVuuJjKGpq?@UkR<>JJv}|E9p{pIT>MX& z8dPKG?dIFVXWs6Yzp(N9@hZ!cwycN1vtc+-f$8BEj!R07FMqMXZ{^^Mg4Co!g;>{E zCnqN$Au(tkk;Ub7_~x)RGT-2=t*xzDV=)a%}i0m8V>u!U3b?@Wf$T+S9_VE?DvCY&r{${O9|o- z)R*8kU5=u7^!6#loWfn%zalIw45;b)kD5KM=H};3^?>Jo{P#9$n&7-EU;o18-~L}yV@+~(L3V!q zTHofBxFHFI_II-Jy;To*oz&2=1TMPh}T9CQ!)*H)W)aU61*{SyekYvd3mA*NqI0l7xhv<`vnO4Cu_O z|5{I@)cIJur_f;e7`h|Sx+HwKa+z#Yi0fE&bbCYNqC3#9!30EvDoiL%|8qsMq$?=?ZKX=k2i|NMG2-Ge1Fs8nQq`ObH1lcaIH@ zw|@laRa#IqOJ3vPw74f&dk5ycLm_s$aIK!jBv6^9EP4vn)(!wtb6WbL)6-i)yL2@q zWc~BM?5_>d!NuYLO&|*{(QT1>17pO1|C-cgs>g*3IG#xG_wNq8?izqBBlw_0R79kF zHZME-&(37H-78eo)|JDN(NREYdQT-1$9`_iHytJGKMKJj_q?`^09B~N{OQF88er-T zC-}TPli$siXT`+Ctex&z?|UdIz0s~8OPQ!LHx@_y6C=${vYMC5)4*bGWM;j1HAb2G zQMm9Fy0#`jbr%ie*qD!XJFYsK%F9D$&nYaa9?KLNrJ>On zHM$2KlZpz_2-Fmh+;f_9bM|hRo^TaL;PG$<1eC?qM`Sx0k%VhjJ7vElj2Zj~A!Pb5 zgiwXINO>a~VBF&skqOa_%#qx_Ot%1sxmVrI*E}kpkx_R!gJKYz_QnW{bs+7ynAX%m`x7d(BtBvzCXuU9H$B31%<6W(Qaz*stZf^xE~SJ3F)A zZ1r8T+WD@3x0PttPVF@{HRVYqz_d?rLIK8-ZeIQP$%20K<%LV=E5@ZEJ~RnQX5+y( z8*3-)GF`HK9wMnuTME|$Nv4QcGKMM&Nt??|zb{Xo7z_^L-~4WKXS1!}CC18`umsl& zetf#3dY4_;*4Ot*>2~WUP}Lb!eRVy7ak?Q-dprLvqL3iq=5iVZXW^RmXsHyLZ4L9YGYf0REVi zdON$)CDz+}tJZiv3X~m`Y03rJt0~pX6@{4PkpXg@Ufya=nHI}|a5ESAYO!TwE+vFe z$qHG~YHYe`%NSHgacwOvl1X7PF|XT;4Q0yNVs&O&*&$zF*q%@>$L%U0*&wKyIOvGX z&&Ylnr*3U*Y=7&{Qt7^dL+-BR5?Ee}!@>Y?FtjqY-a zFeFpJ-~eE3HJ01vXdW>sGA%k8<>0RxOX^%{oSx!jPDheiW9YXVZc=NY)Co?bw?0Ouf2%pBPjqt2xe7!xt(3uC4W&YK}vd1j1i|?9T;=JU_j{+ z12lSK$TwQE6x2PcMCQNE3)tnZL8>}@`mUplv+UuTa?jwP(ImIq>1X$uuC6@m#b$6M zp_BX0K7R5Ps73u7lRa=A2mJ;^>{_$)nVQ+_Xm(G~RYGSsc&E#|n5Hg^1gbE`*99Po z{OKuXXSI|{!6*Tcsc0-*n5t@R?1 zd;tmV-ob%v%KY*&vk-sZofmPDbd2vP+ccgy6>RbyzSJ4G;~HT z#jlUH}itYT5j zDVDILIVd)ajZsoKI*sA{XA+;OYKTm`{-P#kXRqb3U#Do{Is9<``xm$&J?0l082CNS zX&dH$Bb+3ia+*%NYE!X zgO@$>hG)j74vWhy`qQfA`<{W-wckrWw8tRM2Ma+>lzsb~J6z$?38y7&stEbH=Kx#V zZve~!xE%(>r~C!wJA4=Ilze<2>mAxlK*GjAJzK+S{G&|A$n2w9tFc3smq>>^XB?%X zXnyqHo!DOyDIu}YtnklXMExZJl!@W)HwQa$qfK|WSCz&?D(fCjRfpXX#PBcQyt6Sp zz+4$dbM%>tj>ZLN1Y;#5xHVNJ3iI7xh)&U;gPaZ#N_(vKKAy=T=IQpR2QnM+})5Ba)Ocik*|vd0DVxsDI4%n(KS_ z{yTA(58vb~#-8L#sU%UuDJi-)kC|519!M9Q0EryQD!CI++5xa~9%QUXKj59Vwpz*+ zKlJx&Opq|M3Rpmw%N#^T^5xqAfwlRK%21h#(#4pzvN$_3vbJoDF!~Um05f`AsF?}e ze$TF~vghRzNDUXLBq4`)P}RE^ z?H?;Rhg2g0h{3yAVb}*2HT#F(OQ5Jp1}j0~FGiak`#c09nqHNr|P`9bB_B z=f&y!3DJ!7h#dT*q5%s*1UZ=TlMdN>q~~+b+qVe~hpwwqU2&+UL(i8GHLo{&C3Bi& z+)tX=e#Zzm$!5q=K%PPM^;<61lfYiDwq8uV*pV5{m0on&NCCI@fmA+nt8s*!`Tl-A zeWjvkzxkt5*u6(ky{~3_`Ekfy?agF&DvzMmi4}>=v`agD5(M<&U&PfBkdTlr(>{{6 zmu4fqYF>`n?cEgVsC+m216=wMe8>}nZt`sFzX5@c_;mcqERnnC%j1Pt74A*vgbCDa zO6Gd|I?Efl^=_1vhl@3K#E7&KRA{}zoxchjq{{mdAG7-{aa5-Hy zA}h-wp7bZ`mX_$e2Qffg5+pnh(9!4 z;BUjq-yS(wJl$bw;w20D6pQ{e%Jg5LShJ11>v6e;w7QFTL>{>6Q~34c@3&5&5fKqU z8VmmL1fXb7_vibH`@6eeF}&xmG#YsN@=bg~f;!gE5!%<-&;sJ5_bZ9-nNO#0-mv5{ z#7C!Gm^OU~Jl96aB6YYGpvM;*9uEWG=7T1PvH!m>d5G1$CV-0n z56l>e`o-z4=U{}oWQP~@4QBvOd5cOa@E>TVh_3SfhR4Kv6l&C<3NNHJHeA$c_h;I5 zs=O%a5q__8BaU_FYGSN^^ItfIiA4Vrt|< zETw~5i_eJ(CsN<`LJ>*LxHYqZnC?KWA}AA(prFed(o3 zj!(Fo#Vc(%ODmt`;ltZd#kvcvhbgilOYH!+Rq>JA2&v7Pgdv)U-@nceP_PsQfp~_& zWLOColR80)x3^%kFdX&!g;MBc>+ywZZ#OX`y61}(fZ@t}1FvpO%&?^-h|)$P`ouX2 z?P%T@@O+#D<@FiwRtSE+6DBHhQ-h*|B%xYVRRH1$cJ-n z+D3;UlFkueG%o+67LMQQ83%mT!=lq6_ov?<_V>I~zf@b!E6w{J_Ix}bqaVFx6bFBN zd8fbn-!LSmyYEPF($l9;PtVV_0H{+-i;9ARnGRqI*TG865JCB~62T;8>yNg;mZPeA z>*=B2F6h0=1=)y0wK#}du9R@1L1|onV1!lklyr1#>=!_B@(}fnj>c-Nt*@_dZE5QO z6wc{B5dDEqcD8S7W|BJfo6qD`#~v4=TJ$>r2F#hD#w&~eKW|N}3$exQeQ8nGvb2V{ zxvi=t#sgn2-cFPFfDt10RYs$4Y7Oc1q*d!I!RlvsAl~Xddod0Zn;jut>lY0#goKK! zpn~|+=fD}T8J@?%>N|W_dgnfcni+i$9#KQdj5OtcZ)hZ{neIl~$Ketvt7FQ2GHFF6 zBvqR10LfB0z8y8|+6Cz&(%s6UCuLtQ9!Ma=iCau5;M8qy9{aUEGBRAT=eFap@RofH zi4FJ=wyX&OSPy(bY_undqs^X*q>AX|LFf82NQ}PFOr_uRzbrJV;;pVHMzxg3-OVbp z*SksGvc)V$@sVW>M0SsA981*~w;x+B%fSuncdG>ru^6M*Ye;z#VPbBqu$ z@_kR=C6vYirKos{4G{U()zXz0TzIg5 ze0I?HA)IgB$aKOLF!_UQsLRU=h?F~CtWizAW6uo5BBuaC1iF_OUqJRM-w;lLP}OPj z{0cMDi=qsj@G$yR6IS>15lW+#>XmBLesn{OExFrICy5|_ z5Ns=D(s=^oQcp2342+F{0MdFko7J?qZMI={`*b0YG?DH+%m?5RI;myB7>THvcZBgO z$zCo^d@i=p*tB$VxcKGMsRsa0lj= z@2%be@9U#Sg)gs1KBXA)Wj~@jXmJ?pQLYTWMbNq1lSKf`g;QFQiIzYen#{%^v-x%% zcLgOZ%WcI&x<014LI;~du6YHVXx=7R>FDFG5NgHDwXI9vMFA)tW6KNo`OIY?^kw(2 z*iII--YBDn-b%l6R}D>Szpn(z=GI$Z$xe`2Qx1KYB8=G%1sT6)SzTF4k4?z zqq>}|L>$Tu*XP!M`qV9-3CO^hR9lY}aJrQ%E$c+8$ZrYQjQpK5dUu12C}E7$S1PtH zgXAkf2j%i)?=cLPooST=?Xo9P4bB>Tn{m5SG=X!0L9>#jT}dpOcjY=5?|;O;wvmQ* zZCYJ`h!+wPlCQr%5OqVjb33%sg9F3PITU#h4_$Kgu%lLn6svkWU(L@jJ$(acLQH2# zEX+34+tel*#eV%wzR0JW0FI$!Qd(N2+5a*FmLMh8HNDid}f9d3! z?BBTrtbX!b?hff7ZTXAB#eIOn10X!J;XKlM(dEF63~)3d7mW3^{VMhUelaX+(R*R^ zb3X1@t_a#?@|69((zQo^j0z0N84RyKq)TXWqbcQz0{M=@0wt{Vj35j#dU?M`i5yk) znK~j36&@55R3QIJUSG_m=Et<<#0uO&L`|EI|Y=kM>$^b zBb(JI>NR$rutsd@13z8r36SP_+KdC!3`H{9kQxqqgGFi&ogb=V`LMS4=AuPr3^d_lx?o z%if#_Xn@a=AZ)ytIq_vb=%~#mBD{1Y@K!zc zlF#Uc;=k1-ND4LHJ?}H7p{rE$UWt8OjfG1+>e#v5eOLGBbCAKPb@1*fXSbUHz)2W_ zSnY4$)azCKU*B|r^$&|Qv5XL?j*^XMcyT;+V=l`CY|kicA43CuW%FV*+~J1 z3jL#dAdH^R4(FWS2U-?U{JWzk2g*2v@6m+)Gkw;*SMs#~G!2N&``GW{zY$_tl@h?%euX5#hahH6?X@SB(t}9@k4HIF}khT&7Do%VU zBJ#sD>;w&PJU0{;(lLY(^LrjF_YAj!==08u)0~l~CgLnO2vEm+m@X%As^bTr#js*7ED9PS*Gl{)GJ-8A`5O zP&_j}KzmfOyo8=RfnKY9bw?LfRZ&0nCYRd>{9usGEdX)L;j2MOzf>U8Cz>+U~%JRZ1&Chwd#%6PDa8S|7$;r;{pf`p4z?sK*2`EF)qRAP+faFrGep({ikB~ODKh1l!^}ozsyIx_PKcp6p7#-fb$ss%Aze0ovM3I~ z41h$=cl7uC0(nY##~VmH!6GMuyLaz70Ns;E@Xym^;q0J4pMgi;h$UJcgX38^J~ST;O#ACoK`qRL>DHzVx2_DLzDc!y~d+_TOv@aWSv3PhrPTJfEP2 zvxY!zJ}$!v+d5?afC{1ZDzcrJ(Q-kAomdnlyR9$%t-bQtG4UcEdWboHSn*Iid!~G@ z06i%8DseRGC-)+<2C)~$l;aBq`D?baiO<8Hb{w+h{&YRq>sVrq89W>woa7~MB1TCX9)q8rwG@wRi&vqemcuEdc^TmiR@s@Ae zgUq<1O@raw^g!9O^yt}bddPMB=Z8qQL8BAp6{~3!%TY`Ha(5FSiZ+|IbFtX54PhSu zH5SDXPjQ~LjuxG1U!b7K1>zU#sB7Jm9@EHPee672<-z6_;S+wyj9^x2C^~UO`+2Ua zETMc_d$dP5QI)BH2l}V5_G@OLrehUpo3kEdtOFbYq8+$3Ke=T|yr>T!^w%b<0hE@i za|9kqe027NmxM#&Wd{qUuQXY;i>4xS%PW9koev(L@H6x$Xl!|?=ri&Ujt5)on8M^F zYv|mdHADj>I|1pfl5-0EITp~Ew61%RwIR|`tH~5!fNjdP*#FT*WQvT0*>98#@Yx1)RIA_*e+O6P$q4vgGe8^B{OELY7sPsLD zpDlsILJV|;p6Z(bK+fxWc(PgE7Ze2eJAZ^NHz=k6D~=%PfXu~W)+G4TboZSndJg&- zi*G%(;>4xmlxPwhR(1u7uB3R@){Z`0Ejs09ym%-XjPsm`-;>8%wPVYArfvj?v>>5i zV`5`J@ckYc8R?o%e^C8w{mX5{&s^KRlm}B`0T$f*!lI6ZoL~4zj&1e`rCF3MB&w{G z^=pSzGpI48Ul!Fk$fcen#>bC?q$yx%UXj`FOal@#>izo@bq*V0gxqKZFXc5gX={P% zmN(eS!N!Jk`<8eTCAd& z#L!ghV=Xw27Rv-|nY4-jB4!f7i2yWfivd^!&_WND0Dgo@?$Z|_j0;lsL#`bjO_#@0 z@FR$mlk@p=x#s9>6hdId1BHcwLm&Ve=ZK{EqwV^0B_n~(uSZgCe47SixG{m@Jj^a4n@0(_V`b9u8>i}4yYL`hL`b8CxY?1R5QNFG-J8Dr7w z;njgmugjyci;E_o({Da^K>|@&H-lb#62OLDBTbY1O4sVAeoMvNU7B&Gco2}{dN0m?e6$&sfjC=V^6o*ad$XenE4yvav# z5Gt;xmVZ4ta4kRrx&7hu^JmoW6*6(-Xz>QdA#VjmghfQQuBEKqs8A*Dk$$-2xpTnF z)3LP3xH4@w>)z4P@I1_wF}wKFq0XJ!XCcS;BY(OjhGm-B_v*|1`0?W{I3SPL0K4`a z44nWgK%@1xx9fH7%+yzd%p1t$1F13~ zm{9;4AzjJLUTx_f)x^3#kUr4RczSOC?L88(14lE|K?Dx)c9&AO?YE~B{P2%uc#U@1 z>Y9Ja>SWsiAtKw$G4%#xtY8-Gkj&~(0C4pb;Arr6w1 z5U5pgU@Yj{(;ctt?3X{1?u;ZuWLSeojC$<12cF_C*MIxG@+F_{SmhK&5FZB`hwkSr zT}O6olNG zLx`@ORw>P=^C?bsY}Qt5tK;X>wc?dxg6LNVsWCve5vWE~lon^`trp)ON$=d3iu({n zRj;X0X*E-q?eCA0px$-$CLdLXa;So+V79a|QF6-T+;S>~yGdq%JNQTvq{O=)0MgjZ+A%4T{Q3paN?K-@Y?=;+LXQ;8;S3oOu>7%Wtd ztSNx(WYnsnXJp(4Q{JKj$OHl5wB1v84CT%K^qs!c>p*3^+_LGpxwa99A0vhLe{B*s}f1Pu3~@AQ!4$f&C}0jBLt2c7*uty>tn?SH5(?~cJ+?dD0x$uz5yAI z3dyk?_Tb{0NvFB3PZ4_u3vF#d!Qt))J#9KVM3cXA3o46Ed6gTaEm_@4zBHR@3C59) zWZzC#AJNUk$$87%NM^<>Ydx6}|LF0Tsd#>)0sJS1*H@P@JGTU8!Qrztrt8(5`)IQ7e(C`3-~?HdQy`Tu(Ucky4IxT(ja8JUKKQ&e;x~D_6D6ivQ6W1q79ivb&nGL$cIP&fW-(ol=P!92^9x`UoS3+EhX; zN8n!B+mqKSK9I6yTh69BbY|67+;1wyayzc5cVvJ9QE={b z8%V~F^GFPxN%T#Yt5+h?_OvR0Dj@KcWY)Ij2C+k(CwO%r`75-vl)F8{{W>4|VnkF0 zOKQr@VnUR5}w22pBh0AV^vQX z977vB+u4+aQa+2;zMX&X?=J?QXiag&;t?LC%{Lc79=0%eo$0iPYW{ENqV)uvwY6Aa3iE6bwt zEW$xs!})}64?^*lTHH}y+Gb&#Tc+k5m1^al6tMC03!WCLE*;2QdM|Y~88#_pk!eD| zOVyJqhrP;H&o(a{c0WWTqcqmin6R1b>xj~(V~fq1%qxI^4XkIBy;$C*-b^dKK&&7i ztRfH0u2w(PgZzWlmj^O!fdPr5nPvE9Cf`)JF6Exh4@@zuG9A8CwOxLgI#ZY9;-ncS z>k{0WAkwiJBRK-CFYx%8oug)&7?5XlJ1ZweKXz5YV7WxS_O&PQc7e$WV7IlkwO}LS zc>X-RmKG_y7+{>xA3n^I9-Ez=9UF`5TVeG?y+kzVO&L{y-bLGVbRaxA+hBOppJn&s z?8xx=HR=P+pFi}(awV^?c3N7IKV#Uf@>Wl#>ynI*=E|Y3qYRU=uz0F&qgXeL`1Ufg zJmWS|89G}_xhyl%9ZV34oUJt1fIXJ5ytRLJahlqHPe2fT9GxF%`!7)|2dUImN%q9W zpO8`H$RxhVA(HghfX@!U*d547iGRV^)KpYKA~JCSLCjMa*54i*H=_ZN#uLY_$(tU_ zw@D1j-}IZ*cv~lZ?RM>PH%v)DM*%bZWimrI)NU;XJPy42(0=%{KK+ zi@pEREXlg>lM1Uz*jQ<6w>C7|qtlQDs-7GfSq2Vxpqk>aG1@aY7>QOZ5{zv)dLM(b zNV76XLTByy!70;%n!(lW8b4$0;X)0(qm?>kHe00XJ7GV~NtzhsEhx4G$*dPzL+z7I z@)m@JWnlIR!FgSWO+WPJz_MgQ$(4TkZPBH3PCYNhDc5Kvrut2?M)V|>)>?~{OpppU zzkJu7_8@a^*B6J)=;tifACB^v?bPUvQh{1-Me4JNfM|)IaOJ+!V0nshU*&guh0LV} zM$eiE-$6EtAqT(i(0M-p>~R-U%LN-8J6eP$jcYI2WR;j>X8K=D6%Vd?{RY?lJl=Zv zz*RubA>nr=@-EV4dU`U3OU5Osbj%csJTXWn?ncKSZ*2%nxWt$hG190`lto7Zwaoi> zZc}Pe#MnlszU-Tv`2Dp0b3)jCi;-!e>YeQpXzZ6A6=u!|m zc+$FK_Qy6iuT>|*xExJcRp`w%5~L|3#6gIVS_mWuvj)W}R%sZrycBNH8eee#x<3{A zlHG&vj!#}pJKh0BpD{URp^d%g)dl%d>7p84;b?8`W3FEJAt2bF1EH-?cf?K(8@fg# z7?-&X7#%XlQWKIZGb#=`sW!$61u@x^ajV6kI|NwJje7~2+|mXU@ed~bCm>ag3*3k>#4Y_mjIWk448 z)dl-YeXS^To{G!U}r$yt@!CRf`=CjiP#!C7aEFypq~xaG8lh ztWO`kCYpkNpE++NvhMj`%t&m0E*@qS>X zO=c8r+0@I~!O%^S+KKQ0R5#E{dHTJs^_fFY>{L8bGdkOx-UT+>EX>h%4%*UGYTZL- zPcOreU;ECvra`F;?6?5}%B;_HiSd?rf~)mVDM~wWmU7y_4ME6FZ}MEIW1mdisfXTo z%w$Hqtzb_4*sE&%goD=K=-SD2=^Ew!%$dP>S!mGt(V3M%p76;FVlJuLA$NH!JcA|U zFt4|(*Oz1QI7{s4uqVI|GF*NNVdwvz*W^1>qcE?w@;n~D;pwU9(r1h8IN+qs&(X;a z@9uD<(b~7X1cmTnPk!pbc$)3o!uPuDKRo_9ahbfpicQP+`s^(wKg6qeI*%Z>_;9fE zo%c?)%pT3^x@F!2LgrqP+8zn0Z7t7v+h;(Q&Cq<9K7D(PMPzt-M2GS2-FroTtWAUY zF#H%F$>+rnaTTj~vIRLE&WV(L!*EwJrkAtSjX$MRGqO#t*-i2Usvee}p1Qq9QL2fj z_Xi=lyzD!@F*AY_QOkq*+2T5Ga`V<`s>kN2J)C#Af>gJ%V{QpqITNH*$RRo%A8TySdt|*zARacgX8drjc(``Ehd@{gNO-&1uF3^6E!2+=q-5C7y2oDy27qLoQ$xP0v zwvN&ZN?EGL*Z!UPB2VgF?oEX%Tg6?Z3`EG>O+B17ym*Wsmxj z9#!C3&5HmWqx_mcSVI(!0%v7A3^m<7*c-~eEnP2;jl7G8HrSw@rcRBGAbNx?o+&wwz``k+O^-=$pB3kEkhuaG5Jxl>_ z)RP8k6bS#0i5!FjUB5oUP@`&Pc_$>yf~!W7Lm2UI(awM7!PrX)aO)HbqBANM$FJ7V zbtZ@qyo1v;sjc3Rj?>g-+l9m={p8xm_IXk-$Jg(LY=%t6elv>;y5=Je^7~kvyt7}v zbauRwW6r}48UH=^8PR)n(ida)3U7v$j*?6NcWd712kfxKDp+VX^)V0J|MQ@St)Mnu z#?UPgJjVD_f82+#tXxsqVY?_dSwYJ`ePQO^hEyF)5w}KO>J~9V0~P)jirRk(;1o zm8Qonu;|I3JpS;p3F#rznD@R)rST-^T2#VI(dFX@ktb8(nE-GKYd_eFy(%c&+w_zjJ(+l+Zq)mlBCZPC1Jl7=%h*n_c zi}B5&5t7+Q{blg+co*@=t$2mQk)AIOVQ;ulE+kVEHQ4d&HTjbfp{`f(;cor$?bMyi zq3^8Zy~DcJ>j%5JIpH&P^+cN3@J)pY*#sL&L<21+8M!mx-!23w^#5|}mXnpm4u-KL z6ais~-y^BV^wYAi((c)Bv~?h=D=oSw#ENzH4Or&AZrSCwl7bXLTkB z?@WN-RYTZP5dOwUrD$VDql9l>nrE|}@z|pVhC-oGtC0fV!i}$pcOCIZxwv9EWD-WEd-3O; zQ9h8`-+nu4fr^ff^T796gg9fI!SC4_lKa0yaaC5-v57kAzuB z6C<4kz=L7n<#`Qae9BtVMwgpIK}mUeCD#`w*~OM(z=4nvOE=}922{1Z5j7=KAbvZw zJ$=esyainKt;tG#6dpIqoZM<_6KZP(qm{1Cu;=PbJ*};E24d#GZJ^sWge|DdTFUsB zuDz|GX76@F^luIf2>}4_kCNGc_JIW&$JPE{D}C3(w4q8G+dDf8>s-6*BOly;p~6SbFR)p1^{cQ$5#9sxInx9Q)c&PWKiJU@)=9(`AF_&(XJJRa^=j zF=#2Mq~A8$kjb1YyqQGhZ>qJj@_Fz;(d(Q61~Wn^*QWh!H8UpdJv^LZ(CVJYOQBtB z%U=9p^lOnJz!$|BLuu=a*LK+m(ZCjy@eP4V1UCC6VS8(9B3tTi=L%p}^@Q#JXW%Ix z0wP$rm=%j-x=QvJ!iV2{EIOwOveYY+;N57}OxXd2lE@W^CZgN;? zLpO*8gsj+@kCM{yKa!L11zqq@OOGF@sl#t=MpfL#IRRGRzG#kjT=Bx^u2+fk4_fXf z_tUsdC#Z4*ovO3S*^?OfFeReh1)CE%R^u}u=mg_iVCo)?Y4xYcmDPIkCZv49!>nle z_N~OluIuV@E-(~T&t$s7^q_7sJQ(S{CAi1p&1jM7TqD}kr~HKssUXIY4FNF@&jnO` z&8B@}q9sW51t-^Wj?Az1BW(Wz#QN7;loiyfL-1K0SyEk{8>3?0DeSbRnezqcf!2c+ ztEmq|RGV;dz02fvMMcO>Ym7OBcr0YV@LXZy_bPYh+d!Ldzc+9+mD5f7Wj%&ojGmeRAJ8ju`R=GBqF0hsLA+`SyFU4}{CXXudu@`3$?;($QIp z16~XhML@y}q$^2;yLhaQ?B&jb^lBNE{5{O6&KLcVp-vi*4MZk@hGU;tYP40DvgzOk?Y#uT9 zQnXBkFKD1GmrlrfF4@+0raqC%9*m59^5>}Vj_6v7RI0VXxRx=oy-3QWNr63gSy$w# zPqlO1lhh#-)4|8NsuO4}P4^NA9~vB__RY5Y0rYnNY?_EdYr)c#7{Rc;BuA0S@Z1B= zR@W2g+5w2{fN;CD(f+#ObO3ro#mu$n?c81>z1u6D+iBg*x}xlt0(%%K^Sb-L{K`Cy z_@CuC=8l$9(SS~c-PW_9_5f{)l+1n>LCwd<2bsw6Xg1#0A9PHfxc!GRaY<9Pw-vYQa2*&nP&EhA$Ht}+O`nCx0G1qISP5B)5 zS23OP52n5Y-{=g7)Ju>-YD=p4HTvZPcsCB08Nnbnnwp6MBzloVcoCcq5x}!l>_ffw zM9lRR*b*<6u$27o5=JZu!p}MYfl6468gnp!Km%v~+%oeMeyyvP;pMx@2+gR;XwBHk zIL%t3Gc33zkq6S-(b4Towvsk)NU#HiUpzAz7J)mIpOWf4UoCk zA9Gs3ODCr32Zv*j)f$1pQcjJ0BP^|DI|}_U)jRRq?|J-g-4?h^>*aNg|HoY!S^73X7yX6B6H7DvQH2dmnCg$E&GZoN8wJU1{NnuA$o^JSLweXpUv)_> zZU1MLAo!%m9}c$%x?0)x(d422ElqBEX+rB+v49a!@bz~!5QJ=0|;1H@Vnf7z0tWBsib^1;TMZ{zdSRIc??Ec)O-mGwK^C{)X(X)oi9S{aB;Uit=X z#Js#!u!8a^{=7IZR#&6TSZ+UOX^l@SOOfWEvdFu1<`ZN@c35f|>NWRcVSg&se1i4& z-|rIl3uj{)o_pA)B<+7WA*Fp91V$WTw@{znjrCHvsx1;YLcmp$?~tc|2f6i5x6oWe zQj3DmySu?SQ|qCRF4$#(58m{tB*%!xQpV{la;!Zfw#|VMXKH}Z^Un*vmgXK+S^N}E ztr)mgooww%f07gd}Si`RaQ_CtXTn{r72zMBdV8>R;i)3K)HZmg({ zmJL|G#w~uft}gC#eB(_C5QE`=xnBE$YdIUis{t#C)#P!pzE^7gfROP%gTJsQn!cz> z=Np5fX+wR9;f=?}IMGd!y2RIxDDXvtP-!rcX@@gpUQ5>SN=V3sM@Q3Evg+C^>f8fc zq{MRnmInK1YXiBQpKHm=O>I6GH4%9(c`OnV5fK4#g(X`6(ttsruNj-XPU~8z#QQsa z=lT`Kt;p%Y&O?p;?#z6Gyt-DUjDAB+QiqN<_VgBdaTN&{>yV31QO_H7aN2+-9$|Lm zPmk;CuD;PQYKqhlx)#_Iw9!lyex{GrwJ)yf%=yv3kXsOn5QLP*_bf(IWP+2KxHoUO z4C}Hp=kv3OdpL~9H@@Ks{-TIBJxUXJF^C-~qwYhpV|{gjKMV%tp|!>d)=d+>?#A{c zApZFg?qpfu^=?|z<83=&`2SEtfNxj`&FbuDGc?0?zfey;RCKmud4gJkxC_%eBUZ0P zYDU2?wo>ZqxFF@<6y5c`6yc^PM=C9Dc90J}^>=Oy8XA&c%E-$4{ds$VxrV6)<3%B%K>z{h zYTnn6o<=45QlQ;D;jxSK=&d2Re}9kLR2JLwX;G$Y$fN3q6XD+iOrAyzZY>6kmmHS! zl$LO>qFK}=?Wqb*m*OPt-hJ|V zCGS=2<{xUmBOJqA<{F*`RA!m+qs^IGT!rM7t|uzN|6{p{z<29@VwYF!cG|bsq4$PD zSc84Y@M-9!zFA)g8V-?4@bdJPo^ehsa9>^&KmaR(&ouK|=E|7G7#8_=IcDt3uruD> z&C7leWy=(Bi+a>vpNsapG+Bpdh$rYF{FzpykvEN`sFUG>4+Wq(T?=zo3eU5DeRo1z zc_z(D4q_kJKJlb%jT_@Ny~Hp_dz?NUuYOZ(hFZ)YrPUC-W%>-Z%^g-Y*LLZ~rH|rW zq}{62nW0eIC|`U4&~`;I?)kdJ?Hrc6psNy;DwYYZ-;!UIsk*7+DZc1kZ{u)IAL)lyJUp z9oAG6sN{H1B6+KUq3a~(SA>(Zv$MGPy|}JWa4%Fa%(nL8YH8z1Dv2N+j;D|qi28h{ z2cwU`d<*>>0s;o7gs`BpLuke(>p-y|U2d@%X%}T}PjRG?Mw8;crUJAZ-T6%=(m+B& z?*WKCHkZL)K1@i2Gab7fP!L~LAYx0);W&=NrKvhmYB<`@FYhj&91C(h>aa4NNGu(+ z#rbvFn=)cqiuu&sRLjjzV>GKWbSE%X$)C)Bhrz#l*CePj3@h8ELxArOW*>3rD(NpC zAb|au>5I|48Ug|cQp__XvEKDWg8%&gS@7`h_3801w=wrO8gHe3RDD_tmNZyf2#D(J z2V!AApR~|b1KNnqOM)}0+CPuZD>1TbUJ!@gPjb3{=Y4y-_*qhN^24UvU=1StUh6c+ z?Q-WJSH;4@vRbN64>kgLzl|)ldM{*++kGKl(``3oIl)2z2Zp@16>%p8tTQq!n)=r7 zXFSXt=k~W#0AGW8fIsjny-4aghms74jU3lan?AipTZB5vt0`FgH96oNAV5si@xXUW zj5$_C)k08Nw5Vrwe~>Eg+3zCcjt7sb@Fil6u#%csxysglM9n72bKbn=oJ(dnTUXg8y>Aixfzu@o|kUEk!r1_uQndPXDzpx|ZuaXe%D$e0xw;_w zvl#|R z@HB^;*!P6s`JJ=BLAvJ!ubR?^b~?97xUkBnO$JOQs7%(~uInBr`OZE_Q`eJC*4o1e z)!nPgEb-l>_j=}ewEp6@zM^0*MM`r1j>}+R;!@)eQw8QahIbI}{DXoEm_lFn3yYK+ zq@OfDb!n)@nRnVko?X8GlC6t`LWwo}6}Dx88V zY_ZyiKXw>`T<~XLet36~%5{^%cl%%ke0`n09}ru6?mwVA#eB?Iu=_D_D$XUvzTsb9 zI#9wb14q9v&1+Z;FW)b$Ks^o64Hye*v$yclL3#|g=&>>0+Jf;x;!Bu~%gy6WZ7k0A z)$utV4&5uis)?Va6zzVUn4CK+@jX2^)0vEK>JsJz@OT&B~<%@X{K}0lvw|1 zQL$DyG5;orFs+BTJE%Y@ZC_71WfpLoVuv~am`JZ-Z({LZsA0#Ft^Hfjevq6y_|cov zoh@a8_H>^J(|oi|g$he*e=*VB^gEk(z9jQopHV`m4V@+V~*0B`KPl48}9q{YQ`%;&_YxaD~L4Ts>yR-rJkdC`i@7s$>NL$$G;k!=- zl}P8xMp|aSG=|WWrGHI~m`$R_s0~np+CVI4&NfPO`8-@-oi8gps%*`dbIb2FVL2&s z77VMK$ssT-t?f26@aFRn(ibPsc+*xEIl}x-t$w_H3B(!zco9q+LIMHk*Y2|MZ$8)E zkU5WPH__HUa2GlqBj0`x2eF%rOWp{;aJX-6PG18c#`o`sE(bZEjVNX9YaJOPT8Bmo z8zvkIES$dIS;6NRjL*Hg;wvdZEY*>zaoX8ETmx50OPj<3i7-Z5vyCXKw&yw_r-w>T z#-uLado25{o3iC=Y96YCdzi9=RAyr*Jw_`KHJ|Xw)Ti%1p;eOqC@F}3aj|SRm)u!W z!0YbFQE^=jQO<`}BqNx0m8#FPxgP3G+66_BrHs$yDT3%Td?%2BK8*GXAv`AyZ8GzW zKOsrlr>!KbY48{elAw)A7fg1!Sd9o^!K$2!>4+T9{T=`7UI2K>IrnmmgBtU(FhM~n z&r3Fu)5>V7%YCUA2k})`$5T}?w5l$@N8yb^QO=CK%YCioi&N^Vker_U&4S5h6DOf_ zFFL>3&}`e=c?@!uf@Ow8L!{;P3cw_VfZ4vjc^B46ifspg;r&3^N%U(d9-Fe(?BG6| zq;N&4(iY{L`J31tUcM;?CY-f+X%w5vg(b)tRq3#?Ju@dR`Jkjm0UnK2DcY|Z-Y(A} z?6)OJbQD^mFzb3V`CnaR&vR=$x5D-~({}Pf{TE3P;0HGHFbYhu5$itzTHV+Njbw&C ztzwmd5sX19o|EOdGnM9niH?y)QNM$NydGH!pY{v*OD(nHONz!Ne`%bf_7!)r9-yu39XUxRbg3_D@SY&hJccbjD|%Fi1>p|DGw(oTj4pSG5!+8>FIrd z#4Lk>+pxO0d>}JiurW7f(WQ-s0$O$wy@;eK5=~al{g%Mpy#;^fE)e|f?FmgQ3PAn| z;>OG14V#P^gCS1~suL%`ug2>z!>LK|L59&TfUw zC2>cS^zGP&6WT_M0;1t0Nl> zXe)PRRORdY5*-CNmBX}$tdx@#E=IMqi;6U(M#jSx*(_y^)JBN-v_!YOR2<6&5yytr z6J-%(z^Y#9P8bHWh-=((sxcF1eE{TU!0w!)NPn9@o6R|yvzclD@2xLDECkKL&Mdv* z6HwY0m~CMDln#Hlo~BOL^4)g`;FXQa$koQY=RD7!BbJ=L>UZ>o_&DBpUOBhz@ZXt} za;I}qkKTI>V05EZ2L5QOKuQ#{lJb;1?7Zj)n=RlS-b`+3UmT;p4EnpN8WjWuLh%md z$Elqg>}c@eXJROuUZLO)X~PX=nxn3_`=F>k+ctNzR&#vq+dOrAyno5H>1TXX<88Y4~Vv7sYAl!`o2q-~ZOL2`oKn#t50u_;Gq1XFzP`;lw@GAYD)O(vyIba#-|t za0%8&h>esZI2ocAW;=qT+ldJF*AD#KnBJ0gKV!6*&f6_Kz*$uL?`YwxCg6TDVYPfa zcMc^OBINfx)I#>N{y@`Ke$Ls(rz-&b<(E;!(A100CEFN&ide~Pa1HwEFxZ`P-oIw- zyJ8NRvk+GfCXFVJ=6`HJEf%lYZ|cJNQb2F%`-P-`hi=DzL<^%%L9F9<+1m{paUF&k zHN$Um`)K$BEcg~zEB?SEs##p_HT)+`<#L0`+s??T|8aP&y(Vqs*sRh?l26QKr>8JD z&(~gvK0pEXjAnoR707z!E7Lv+{0AZt4|yp>B29KOS_1G)ryIAQ)c0+{MvBj4Fjjir2aFaEVRG7DON@a_&4hHi7y+`9rM68l$!!1AI>$*|8DTzdd_ zj^jg({s|9W2!QaQ0QUXE_i)_F%rP8yg7}JxJSEoNc92GriZ-QWmkvyy3H7S1EMdkt zC1ZhwI3SGWO^>)LvVPouK~|iLVQn!>DOy&UOB?tNu-gY13>0@?d{Brb zL2`}2ClU+d?Fki9!F|Lk`Dg<%V3Gs02al)tS66!?1?v^Q2T_zX1ZE4ho#g*-^P zT%*7(T?CaMwj`zGayhEdznS(MquT>u$}y{mVd|LZlSleoU!Srk!5gTMbKC>UU| zFK92df=kB%Q`uxdrudcUns)tg_#ylUX?2FRbXNGXu|`&yQG4^r7pV|=26&y`tt;Bj z<584`==u_h-k+?2WMJGhh^fViu#Nio>(_+8);q3CQZp{B)e+Y>Q1+%ZK6?chNKH@- z8ur>1%wgo4Vjl@`UrOy|5~d0$Bi(#}kj&#^3k$-sva(9Gca6j3p6}rU*MDz}7K4lB zg_aQDZouJuf4UG5|2RHA2E#KvtlLs6)^x=0CY>A~UjuHF16Qxw77ITU6uIdr`|K}Y z+y^p5fQU1I|4JngayyQXkDr{MXSUvq2-hi`GZvkWjf116Sp#HU0sl1BeLql{Hl}L{ ztVHl%5kdgwxs5Okl$m&eDBhFeuq8mFy*};p0-P*0kYYA00}Dg_#uZDGgg`QY6{Vr% zLR!np#Pk;2{Ys}=bTaQxoROIch&j2DU78viAdMyNeZ%q5z)kVj& z>!lX^!?qSM+yLg%1`@|>Cn=$ARS+Ar4@TPc+~o@a{I?SOYcJ zayhu18_<|$>+c5aYE~9-P4zS&A%RSQx4_4k7>XFli1wQXVpdp8D7s_}0b1Eyy3k#Q zAO|NWAgD;Jbp`Ha2Y0oTl9B?Q>yD0&=yq%@taQ~|@MX~y#TJu#c6!Rz-^so6rTl;L zf`G9;Obhofe>h1=bpeO^c+Cl1DFeC)yu-%kJ{p>FS1{}+7^o=7?;N@r7QE@Z^+2X{ zA9fi>uQ3QNHDU+?>0qPRuL-m~!G-gH-G_#Xy7V80Z{-7cH_J=kpRIR#ettL(H2{a; zmU(GI&S)v9K0doejmrV0)@)aoIbha+>VQ9inAO!c;D-1m3U6=kPoF*k8ce=YE>N-t z*WOnx0#@>y`PNW;U`W7wl-9_|2u#t5iHXfflfF+tg@Qrn3owgkfq*$s!`uSe;p~=^ z!pI({`xIKXU@QTzXyxGa&zn%m+pjLq3#SoDolS@ zulYKwPyc<>)!l9X<3TgqZ|_S^s7F&zcz@we!;0L2-3~1H3LeXeDSFu94>);6e|@dcjpJyC-lN)E(8m2~J^F zk<)@M0dJ&ibU2W*dPz{9(3dGNC#Ljlx)iJ^y~!s@Xiz-VCCqsRMP80aFoaYMNA<*T!+_#!l_|Z z=d??~lQf>L41z36c3cMzK8O#&gTe~DWM4f9H^Na diff --git a/util/annotations/helpers.go b/util/annotations/helpers.go index 776c6e41bfde..720b85ad17d0 100644 --- a/util/annotations/helpers.go +++ b/util/annotations/helpers.go @@ -31,6 +31,11 @@ func IsPaused(cluster *clusterv1.Cluster, o metav1.Object) bool { return HasPausedAnnotation(o) } +// IsExternallyManaged returns true if the object has the `managed-by` annotation. +func IsExternallyManaged(o metav1.Object) bool { + return hasAnnotation(o, clusterv1.ManagedByAnnotation) +} + // HasPausedAnnotation returns true if the object has the `paused` annotation. func HasPausedAnnotation(o metav1.Object) bool { return hasAnnotation(o, clusterv1.PausedAnnotation) diff --git a/util/predicates/generic_predicates.go b/util/predicates/generic_predicates.go index 839aeb544872..7a9dab90080e 100644 --- a/util/predicates/generic_predicates.go +++ b/util/predicates/generic_predicates.go @@ -209,3 +209,35 @@ func processIfLabelMatch(logger logr.Logger, obj client.Object, labelValue strin log.V(4).Info("Resource does not match label, will not attempt to map resource") return false } + +// ResourceIsNotExternallyManaged returns a predicate that returns true only if the resource does not contain +// the externally managed annotation. +// This implements a requirement for InfraCluster providers to be able to ignore externally managed +// cluster infrastructure. +func ResourceIsNotExternallyManaged(logger logr.Logger) predicate.Funcs { + return predicate.Funcs{ + UpdateFunc: func(e event.UpdateEvent) bool { + return processIfNotExternallyManaged(logger.WithValues("predicate", "updateEvent"), e.ObjectNew) + }, + CreateFunc: func(e event.CreateEvent) bool { + return processIfNotExternallyManaged(logger.WithValues("predicate", "createEvent"), e.Object) + }, + DeleteFunc: func(e event.DeleteEvent) bool { + return processIfNotExternallyManaged(logger.WithValues("predicate", "deleteEvent"), e.Object) + }, + GenericFunc: func(e event.GenericEvent) bool { + return processIfNotExternallyManaged(logger.WithValues("predicate", "genericEvent"), e.Object) + }, + } +} + +func processIfNotExternallyManaged(logger logr.Logger, obj client.Object) bool { + kind := strings.ToLower(obj.GetObjectKind().GroupVersionKind().Kind) + log := logger.WithValues("namespace", obj.GetNamespace(), kind, obj.GetName()) + if annotations.IsExternallyManaged(obj) { + log.V(4).Info("Resource is externally managed, will not attempt to map resource") + return false + } + log.V(4).Info("Resource is managed, will attempt to map resource") + return true +}