From b80f32ce7dd6d1d5c2985463e0f4429311925418 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Tue, 5 Apr 2022 11:53:17 +0100 Subject: [PATCH] Add cli flags for chart interval and reconcile strategy Signed-off-by: Somtochi Onyekwere --- cmd/flux/.create_helmrelease.go.swp | Bin 0 -> 16384 bytes cmd/flux/create_helmrelease.go | 51 ++++++++++++++++++++++------ 2 files changed, 40 insertions(+), 11 deletions(-) create mode 100644 cmd/flux/.create_helmrelease.go.swp diff --git a/cmd/flux/.create_helmrelease.go.swp b/cmd/flux/.create_helmrelease.go.swp new file mode 100644 index 0000000000000000000000000000000000000000..d42c707c4f43f19c29f11e07724beb5f80e304ef GIT binary patch literal 16384 zcmeI2U5q4E702%aq78yZj1N5Mr3ss!O?TDIEJhsch1p>ShMf69xNEFHXKes-n`eSEU z3?VVq+22lA-COsbd(OG%o_o7C#*fY~@~gB-hR+8XD_(!`#`s_E+xKRTG3hyhXSOWQ z?TO8<@CDTw@u|i2WM$DX4}0Eb zCvEug`+u_kfAa&3y#SsE_kwkB5KMw|!8zawJop)K5WIR3W6y%0f}emV!4u$n;9>AJ z@D=by@C9IiPk;}DSKiOq%itOCIdBUY2m8Q_7c%xZ_!77S^uRQ@1{?yHfWKeB*ss6? z;7ahj0%Jc0kAg3QJHQEW3%C@Vejj7M2Ty~Cz_)=7ZU&zM9|ijW15dvf@`KL<7c2q| zRKTm}V|?HgSO*^m9|Nzwhp~Tvr@({YZg3LZ2nD;D>4m;2lKPxCY@;c)8}OpW4E0e{#jM~O zPNq`YVbE&}PH%OrL~nJ>(bFVNXa;;6s%3?h(4C#)(F-8dY+Q53siUOKsOL&WY_&Z< z;D>nIt6Ofvt0ZrU^bE&7nbhhSb|_?3)1xmM74lo+CX`C5@$>23Xn57ATx+OPx7cangVZe=c+wQ><+zO~H zXbEoGp$vr2Mu{2U+f_)71gyv&8gbHLkvU}BFhv!@7@-}glCvL5C`nj@$6nCzJqK5H ztI@#gLTYyU;)s>H=)lTnZyE9^n8Jkfz$S6iY6OX>(Ilvl&8js4^#;1r zt4Q^&5*3c}xm4V}2c@L0xa8F%XGo!a$bgcFqpGqYPewwcS$|SzUg|VRzhvp`HBpdtaQOiYi!kDWQ z<57Hh`@TvGMxyYqzjhNS4!HO6esoz0q`#K#Zbfpt5w$FYsCZPx=epd8#T2fBn$&TTVOgDIy?>D^--_T~F;UPa6V+CrXGs%m? z@32xy#q`|3_iS7Ey3w}u&g6y&jEN#+g`%{ODQ#XQHOtc}6)6tf+j+F&hi+gwLT_(2 zbiGer+HPQ&_ivHWF5J{J{f^0V?4(iHc zO5MW-qLvcP2EO4+xT8aIkFKgZrNNJ`LUC_WSK-h#Y-I!*-iXEqYO0i3iRh^Z8jdoY za7{{PoBD0ibEzTn2MoB#EJtO#CB~4#Z5mC%9m8@NJD@Y$a;(6h+*0z;ts`ln9CE=j zp+v zOfRj@&(`?z3ZGeCx^8}Tet8L3b9{Q~I6pGKbX}PX|Fqv;Ej1s=Ct-u01qyUjAfOC#tS^iDfPf>sc;r*ysB?P>;e+7g=QH+4Hwo75NP zXJ(gbvz18=FV7zLLg>54y^R1`ryR>`fKP(c*xSDW{tdnl9s`epyTK7~8F(Fg`@ex#!Jok|z&F9y z!M)%na4n#-fD6FCu=oEXcm=!+o&sIa0LQ^mum&y#KgT)1XMqH5a0pbvpRniuE%*)i zHMj>H1r=}}coF;l7r^u2aX{w+60CubfY-7A{{wgm+z;*r_keA%1-js7paVK1_$7D_ zJPy7Jx*!ArsDPj0EZ`Ba1sdRHum~2w`GC#{=zQQ?;6X484g<31H6Z`Ivl_qw1^yMV zc?x~n=%~d}o0l~N;ZV+aZe4BkSFuSgQ9cl#UT9G{GKsi?EOS~}v=w30d+FV=GIuQ- zxq|8>>7`-VQbZ+%g4M{LpJ><9-bclMep$7zB<^u}LoK8AOvP=quj?GWHZ0#!VN61N zge2rwzCfU(M`$Ua0EUQ4fyNAdwZm7NE!E)}#Kby}_8}&|kW3g5PId|fx}2)2o!pGd zXdrt~GJ`FQEIFO1FX3A`I}9XTv924TYnH}%X~XkuEHji%j8Vh=4|A2~Xw;56?-*{8 zABZwIb!HWtXN*(!v}2t)^o6#mOX%Q+9Xl#>kwpsB`=uskc*YjvhvWO zxqyPVIu&*-!wR%fNwlpD(V5ITajfJexPG+V=`$8481;10TU;{^&T1}-C@#Z{66xu(eWf3KZXP1{)~RdhP-cQ zdaEdQ6Lz2Tjw9+8VtUEgCA&nI0=h)tul)~F3*jFuJ(IpKiSr(3A8?+j!wv^mE zjLloqSD^t5{h$Q~)Y!%kG{LO;nWGf_+L0MxsZS}80{V^upE7m)>j=&(l>41hQI+O= z-*i`1qr=NNoC&KnlY&Fxh~?IItw|NAX2vVk`k)9aEqj6-O$aY6-Vc*d}XF|KNw!E~xVsxiCZKm<%6xxWE zm?WKW0&SL(2>6g=__Af#c*DTH4NAD8iWQA>+P zn+zLuo!)}T>G^}UDDVph>dBo)%1Z3y+34Xk56TE0x+6polR9j<9~=)LMuqa~ai8hc1YQ9En@x2D9b7}QDX z37%A${T#fg)FJ1g73(~gr literal 0 HcmV?d00001 diff --git a/cmd/flux/create_helmrelease.go b/cmd/flux/create_helmrelease.go index a6705f29ec..5a5f2c8483 100644 --- a/cmd/flux/create_helmrelease.go +++ b/cmd/flux/create_helmrelease.go @@ -21,6 +21,7 @@ import ( "encoding/json" "fmt" "os" + "time" "github.com/fluxcd/flux2/internal/flags" "github.com/fluxcd/flux2/internal/utils" @@ -108,17 +109,19 @@ var createHelmReleaseCmd = &cobra.Command{ } type helmReleaseFlags struct { - name string - source flags.HelmChartSource - dependsOn []string - chart string - chartVersion string - targetNamespace string - createNamespace bool - valuesFiles []string - valuesFrom flags.HelmReleaseValuesFrom - saName string - crds flags.CRDsPolicy + name string + source flags.HelmChartSource + dependsOn []string + chart string + chartVersion string + targetNamespace string + createNamespace bool + valuesFiles []string + valuesFrom flags.HelmReleaseValuesFrom + saName string + crds flags.CRDsPolicy + reconcileStrategy string + chartInterval time.Duration } var helmReleaseArgs helmReleaseFlags @@ -132,6 +135,8 @@ func init() { createHelmReleaseCmd.Flags().StringVar(&helmReleaseArgs.targetNamespace, "target-namespace", "", "namespace to install this release, defaults to the HelmRelease namespace") createHelmReleaseCmd.Flags().BoolVar(&helmReleaseArgs.createNamespace, "create-target-namespace", false, "create the target namespace if it does not exist") createHelmReleaseCmd.Flags().StringVar(&helmReleaseArgs.saName, "service-account", "", "the name of the service account to impersonate when reconciling this HelmRelease") + createHelmReleaseCmd.Flags().StringVar(&helmReleaseArgs.reconcileStrategy, "reconcile-strategy", "ChartVersion", "the reconcile strategy for helm chart created by the helm release(accepted values: Revision and ChartRevision)") + createHelmReleaseCmd.Flags().DurationVarP(&helmReleaseArgs.chartInterval, "chart-interval", "", 0, "the interval of which to check for new chart versions") createHelmReleaseCmd.Flags().StringSliceVar(&helmReleaseArgs.valuesFiles, "values", nil, "local path to values.yaml files, also accepts comma-separated values") createHelmReleaseCmd.Flags().Var(&helmReleaseArgs.valuesFrom, "values-from", helmReleaseArgs.valuesFrom.Description()) createHelmReleaseCmd.Flags().Var(&helmReleaseArgs.crds, "crds", helmReleaseArgs.crds.Description()) @@ -154,6 +159,11 @@ func createHelmReleaseCmdRun(cmd *cobra.Command, args []string) error { logger.Generatef("generating HelmRelease") } + if !validateStrategy(helmReleaseArgs.reconcileStrategy) { + return fmt.Errorf("'%s' is an invalid reconcile strategy(valid: Revision, ChartVersion)", + helmReleaseArgs.reconcileStrategy) + } + helmRelease := helmv2.HelmRelease{ ObjectMeta: metav1.ObjectMeta{ Name: name, @@ -177,12 +187,19 @@ func createHelmReleaseCmdRun(cmd *cobra.Command, args []string) error { Name: helmReleaseArgs.source.Name, Namespace: helmReleaseArgs.source.Namespace, }, + ReconcileStrategy: helmReleaseArgs.reconcileStrategy, }, }, Suspend: false, }, } + if helmReleaseArgs.chartInterval != 0 { + helmRelease.Spec.Chart.Spec.Interval = &metav1.Duration{ + Duration: helmReleaseArgs.chartInterval, + } + } + if helmReleaseArgs.createNamespace { if helmRelease.Spec.Install == nil { helmRelease.Spec.Install = &helmv2.Install{} @@ -316,3 +333,15 @@ func isHelmReleaseReady(ctx context.Context, kubeClient client.Client, return apimeta.IsStatusConditionTrue(helmRelease.Status.Conditions, meta.ReadyCondition), nil } } + +func validateStrategy(input string) bool { + allowedStrategy := []string{"Revision", "ChartVersion"} + + for _, strategy := range allowedStrategy { + if strategy == input { + return true + } + } + + return false +}