diff --git a/frontend/src/components/modal/InstallChartModal/InstallReleaseChartModal.tsx b/frontend/src/components/modal/InstallChartModal/InstallReleaseChartModal.tsx index 50eea86..213592a 100644 --- a/frontend/src/components/modal/InstallChartModal/InstallReleaseChartModal.tsx +++ b/frontend/src/components/modal/InstallChartModal/InstallReleaseChartModal.tsx @@ -47,6 +47,7 @@ export const InstallReleaseChartModal = ({ const navigate = useNavigateWithSearchParams(); const [userValues, setUserValues] = useState(""); const [installError, setInstallError] = useState(""); + const [forceUpgrade, setForceUpgrade] = useState(false); const { namespace: queryNamespace, @@ -62,6 +63,7 @@ export const InstallReleaseChartModal = ({ error: versionsError, data: _versions = [], isSuccess, + isLoading: isLoadingVersions, } = useGetVersions(chartName); const [selectedVersionData, setSelectedVersionData] = useState(); @@ -166,6 +168,9 @@ export const InstallReleaseChartModal = ({ } formData.append("version", selectedVersion || ""); formData.append("values", userValues || releaseValues || ""); // if userValues is empty, we use the release values + if (forceUpgrade) { + formData.append("force", "true"); + } const url = `/api/helm/releases/${ namespace ? namespace : "default" }/${releaseName}`; @@ -210,6 +215,18 @@ export const InstallReleaseChartModal = ({ /> } containerClassNames="w-full text-2xl h-2/3" + bottomContent={ + isUpgrade ? ( + + ) : undefined + } actions={[ { id: "1", @@ -223,7 +240,9 @@ export const InstallReleaseChartModal = ({ }, ]} > - {!useURLMode && versions && isNoneEmptyArray(versions) ? ( + {isLoadingVersions ? ( + + ) : !useURLMode && versions && isNoneEmptyArray(versions) ? (
{children}
- {bottomContent ? ( -
{bottomContent}
- ) : ( -
+
+
{bottomContent}
+
{actions?.map((action) => (
- )} +
diff --git a/pkg/dashboard/handlers/helmHandlers.go b/pkg/dashboard/handlers/helmHandlers.go index 0645f51..ca40a3c 100644 --- a/pkg/dashboard/handlers/helmHandlers.go +++ b/pkg/dashboard/handlers/helmHandlers.go @@ -389,7 +389,8 @@ func (h *HelmHandler) Upgrade(c *gin.Context) { } justTemplate := c.PostForm("preview") == "true" - rel, err := existing.Upgrade(repoChart, c.PostForm("version"), justTemplate, values) + force := c.PostForm("force") == "true" + rel, err := existing.Upgrade(repoChart, c.PostForm("version"), justTemplate, force, values) if err != nil { _ = c.AbortWithError(http.StatusInternalServerError, err) return diff --git a/pkg/dashboard/objects/releases.go b/pkg/dashboard/objects/releases.go index e951192..8bdb34b 100644 --- a/pkg/dashboard/objects/releases.go +++ b/pkg/dashboard/objects/releases.go @@ -306,7 +306,7 @@ func (r *Release) GetRev(revNo int) (*Release, error) { return nil, errorx.InternalError.New("No revision found for number %d", revNo) } -func (r *Release) Upgrade(repoChart string, version string, justTemplate bool, values map[string]interface{}) (*release.Release, error) { +func (r *Release) Upgrade(repoChart string, version string, justTemplate bool, force bool, values map[string]interface{}) (*release.Release, error) { r.mx.Lock() defer r.mx.Unlock() @@ -340,6 +340,7 @@ func (r *Release) Upgrade(repoChart string, version string, justTemplate bool, v cmd.DryRunOption = "server" } cmd.ResetValues = true + cmd.Force = force chrt, err := locateChart(cmd.ChartPathOptions, repoChart, r.Settings) if err != nil {