我正在使用 Kubebuilder 构建一个运算符,它将与一个包含一些自定义字段以及ArgoWorkflowTemplate
的所有字段的 CRD 一起使用。这些字段基本上是ArgoWorkflow
的所有字段,因为规范中的字段是相同的,除了我不关心的一个字段。操作员将使用这些WorkflowTemplate
字段来创建一个实际的 ArgoWorkflowTemplate
资源,但在此之前它需要对自定义字段执行一些操作。如何WorkflowTemplate
在我的 CRD 中包含所有字段,而无需逐字复制所有字段并将其手动粘贴到我的 CRD 规范中?
我尝试在我的 CRD 中使用它(我只是添加了与手头问题无关的某些其他字段)
import (
wfv1 "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1"
)
type DefinitionSpec struct {
Field1 string `json:"field1,omitempty"`
Field2 string `json:"field2,omitempty"`
WorkflowSpec wfv1.WorkflowSpec `json:",inline"`
}
如果我这样做,我会在安装 CRD 时收到此错误
$ make install
/Users/mbtamuli/workspace/argo-workflow-operator/bin/controller-gen rbac:roleName=manager-role crd webhook paths="./..." output:crd:artifacts:config=config/crd/bases
/Users/mbtamuli/workspace/argo-workflow-operator/bin/kustomize build config/crd | kubectl apply -f -
The CustomResourceDefinition "definitions.mriyam.dev" is invalid:
* metadata.annotations: Too long: must have at most 262144 bytes
* spec.validation.openAPIV3Schema.properties[spec].properties[templateDefaults].properties[dag].properties[tasks].items.properties[inline].type: Required value: must not be empty for specified object fields
* spec.validation.openAPIV3Schema.properties[spec].properties[templateDefaults].properties[steps].items.items: Required value: must be specified
* spec.validation.openAPIV3Schema.properties[spec].properties[templates].items.properties[dag].properties[tasks].items.properties[inline].type: Required value: must not be empty for specified object fields
* spec.validation.openAPIV3Schema.properties[spec].properties[templates].items.properties[steps].items.items: Required value: must be specified
make: *** [install] Error 1
我从其他 SO 和 GitHub 问题中发现,我可以通过使用 create 而不是 apply 来解决注释问题。
$ bin/kustomize build config/crd | kubectl create -f -
+ kubectl create -f -
The CustomResourceDefinition "definitions.mriyam.dev" is invalid:
* spec.validation.openAPIV3Schema.properties[spec].properties[templateDefaults].properties[dag].properties[tasks].items.properties[inline].type: Required value: must not be empty for specified object fields
* spec.validation.openAPIV3Schema.properties[spec].properties[templateDefaults].properties[steps].items.items: Required value: must be specified
* spec.validation.openAPIV3Schema.properties[spec].properties[templates].items.properties[dag].properties[tasks].items.properties[inline].type: Required value: must not be empty for specified object fields
* spec.validation.openAPIV3Schema.properties[spec].properties[templates].items.properties[steps].items.items: Required value: must be specified