我在我的集群中创建了一个自定义资源定义(CRD)及其控制器,现在我可以创建自定义资源,但是如何验证对CR的更新请求?例如,只能更新特定字段。
我在我的集群中创建了一个自定义资源定义(CRD)及其控制器,现在我可以创建自定义资源,但是如何验证对CR的更新请求?例如,只能更新特定字段。
Status
子资源中,第一次创建时,并始终查看那里的数据。虽然可以忽略Spec
的任何更改,但您的控制器可以注意到Spec
和Status
之间的差异,并在Status
中嵌入警告,告诉用户他们以无效的方式突变了对象并且正在忽略其指定的值。您可以在此处和此处看到该方法的示例。根据该链接存储库的相关自述文件部分,这会导致以下行为:
The
AVAILABLE
column will show false if the UAA client for the team has not been successfully created. TheWARNING
column will display a warning if you have mutated the Team spec after initial creation. TheDIRECTOR
column displays the originally provided value forspec.director
and this is the value that this team will continue to use. If you do attempt to mutate theTeam
resource, you can see your (ignored) user-provided value with the-o wide
flag:$ kubectl get team --all-namespaces -owide NAMESPACE NAME DIRECTOR AVAILABLE WARNING USER-PROVIDED DIRECTOR test test vbox-admin true vbox-admin
If we attempt to mutate the
spec.director
property, here's what we will see:
$ kubectl get team --all-namespaces -owide NAMESPACE NAME DIRECTOR AVAILABLE WARNING USER-PROVIDED DIRECTOR test test vbox-admin true API resource has been mutated; all changes ignored bad-new-director-name