I would like to serialize a Subscription resource (from github.com/operator-framework/api/pkg/operators/v1alpha1
) to YAML using code like this:
subscription := operatorsv1alpha1.Subscription{
TypeMeta: metav1.TypeMeta{
APIVersion: operatorsv1alpha1.SubscriptionCRDAPIVersion,
Kind: operatorsv1alpha1.SubscriptionKind,
},
ObjectMeta: metav1.ObjectMeta{
Namespace: namespaceName,
Name: pkg.Name,
},
Spec: &operatorsv1alpha1.SubscriptionSpec{
Package: pkg.Name,
Channel: channel.Name,
InstallPlanApproval: operatorsv1alpha1.Approval(subscribeFlags.Approval),
CatalogSource: pkg.Status.CatalogSource,
CatalogSourceNamespace: pkg.Status.CatalogSourceNamespace,
},
}
operatorsv1alpha1.AddToScheme(scheme.Scheme)
corev1.AddToScheme(scheme.Scheme)
serializer := json.NewSerializerWithOptions(
json.DefaultMetaFactory, scheme.Scheme, scheme.Scheme,
json.SerializerOptions{
Pretty: true,
Yaml: true,
Strict: true,
})
if err := serializer.Encode(&subscription, os.Stdout); err != nil {
return err
}
This works, except that operator-framework/api
defines a Subcription
resource like this:
type Subscription struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata"`
Spec *SubscriptionSpec `json:"spec"`
// +optional
Status SubscriptionStatus `json:"status"`
}
Which means that the serialized output always includes a status
element with a null status.lastUpdated
field:
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
creationTimestamp: null
name: argocd-operator
spec:
channel: alpha
installPlanApproval: Automatic
name: argocd-operator
source: operatorhubio-catalog
sourceNamespace: olm
status:
lastUpdated: null
Submitting the serialized manifest fails with:
error: error validating "STDIN": error validating data: ValidationError(Subscription.status): missing required field "lastUpdated" in com.coreos.operators.v1alpha1.Subscription.status; if you choose to ignore these errors, turn validation off with --validate=false
Is there a canonical method for serializing these resources without including the status
field?