#7082·Helm

proposal: handle immutable resources on update

Author: dastrobuCreated Nov 26, 2019Updated Sep 11, 2026
Labelsfeature

Steps to reproduce the issue:

helm create tmp
echo '
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
    name: {{ include "tmp.fullname" $ }}
roleRef:
    apiGroup: rbac.authorization.k8s.io
    kind: ClusterRole
    name: {{ .Values.role }}
subjects: []
' > tmp/templates/rolebinding.yaml
helm install tmp tmp --set role=view
helm upgrade --force tmp tmp --set role=edit

This fails with

Error: UPGRADE FAILED: failed to replace object: RoleBinding.rbac.authorization.k8s.io "tmp" is invalid: roleRef: Invalid value: rbac.RoleRef{APIGroup:"rbac.authorization.k8s.io", Kind:"ClusterRole", Name:"edit"}: cannot change roleRef

The expected result would be that helm replaces the role binding due to the --force flag. The problem was already discussed in #6468 but it was mentioned that --force should work, so I am reporting this as new issue.

Output of helm version: version.BuildInfo{Version:"v3.0.0", GitCommit:"e29ce2a54e96cd02ccfce88bee4f58bb6e2a28b6", GitTreeState:"clean", GoVersion:"go1.13.4"} Output of kubectl version: Client Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.4", GitCommit:"a87e9a978f65a8303aa9467537aa59c18122cbf9", GitTreeState:"clean", BuildDate:"2019-07-08T08:51:16Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"darwin/amd64"} Server Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.3", GitCommit:"b3cbbae08ec52a7fc73d334838e18d17e8512749", GitTreeState:"clean", BuildDate:"2019-11-16T01:01:59Z", GoVersion:"go1.12.12", Compiler:"gc", Platform:"linux/amd64"} Cloud Provider/Platform (AKS, GKE, Minikube etc.):

kind (and Openshift)