Openshift: Project object contains (some) immutable fields

project namespace OpenShift immutable label annotation

2 min read | by Jordi Prats

There are just slight differences between a Project and a Namespace in OpenShift, what can be shocking is the fact that Project's metadata is (with exceptions) immutable.

Creating a Project we'll get the Namespace object created as well:

$ kubectl get project test-project NAME DISPLAY NAME STATUS test-project Active $ kubectl get ns test-project NAME STATUS AGE test-project Active 23h 

But if we try to edit the Project like so (or reapplying it's definition):

$ kubectl edit project test-project 

We'll get an error if we try to add or update one labels:

* metadata.labels[test]: Invalid value: "demo": field is immutable, , try updating the namespace 

Or annotations

* metadata.annotations[test]: Invalid value: "demo": field is immutable, try updating the namespace 

As the error says, we can edit the Namespace object instead, but then it kind of misses the point of creating Projects.

There's an exception, we'll be able to update the annotations that starts with openshift.io, for example to change it's Display name:

apiVersion: project.openshift.io/v1 kind: Project metadata:  annotations:  openshift.io/display-name: a (...) 

If you are expecting some consistency, these annotations should be immutable if we are changing them using the Namespace object, right?

$ kubectl edit ns test-project 

Unfortunately, there is no such restriction, we'll be able to update all the annotations (no exceptions) using the Namespace object instead of the Project

apiVersion: v1 kind: Namespace metadata:  annotations:  openshift.io/display-name: b 

Posted on 04/11/2022