我正在遵循下面的博客,该博客解释了如何创建操作符并将另一个CR导入到现有的CR中。http://heidloff.net/article/accessing-third-party-custom-resources-go-operators/
这里https://github.com/nheidloff/operator-sample-go/blob/aa9fd15605a54f712e1233423236bd152940f238/operator-application/controllers/application_controller.go#L276, spec是用硬编码的属性创建的。
我想在我的操作符中导入spark操作符类型。https://github.com/GoogleCloudPlatform/spark-on-k8s-operator/blob/master/pkg/apis/sparkoperator.k8s.io/v1beta2/types.go
这个火花操作符有- 100+类型/属性。通过遵循上面的博客,我可以创建Go对象,但它将被硬编码。我想在CR YAML中根据用户提供的值创建动态对象。例如-客户可以提供25个属性,有时50为spark应用程序。我需要有基于用户YAML创建的动态对象。有人能帮我一下吗?
如果你将spec类型设置为json对象,你可以让spec包含任意json/yaml。你不需要有一个强类型Spec对象,你的操作符可以解码它,并在你的调和操作中做任何你想做的事情,只要你可以从json中序列化和反序列化它。我想应该可以把它设为json.RawMesage
?
硬编码属性是什么意思
?如果我理解正确的话,您希望为资源定义一个API,该API使用来自外部操作符和自定义的两种类型。您可以使用来自特定属性(如ScheduledSparkApplicationSpec
)的类型来扩展API。下面是一个Go中的API定义示例:
type MyKindSpec struct {
// using external third party api (you need to import it)
SparkAppTemplate v1beta2.ScheduledSparkApplicationSpec `json:"sparkAppTemplate,omitempty"`
// using kubernetes core api (you need to import it)
Container v1.Container `json:"container,omitempty"`
// using custom types
MyCustomType MyCustomType `json:"myCustomType,omitempty"`
}
type MyCustomType struct {
FirstField string `json:"firstField,omitempty"`
SecondField []int `json:"secondField,omitempty"`
}