Not being able to register CRD is not a fatal error (#444)

Operator proceeds to checking if CRD is present and ready,
and if not, only then it is a fatal error.
This commit is contained in:
Maxim Ivanov 2019-06-14 15:08:29 +01:00 committed by Sergey Dudoladov
parent e1d9395338
commit 44acd7e4db
2 changed files with 12 additions and 11 deletions

View File

@ -32,7 +32,7 @@ configuration.
kubectl create -f manifests/postgresql-operator-default-configuration.yaml kubectl create -f manifests/postgresql-operator-default-configuration.yaml
kubectl get operatorconfigurations postgresql-operator-default-configuration -o yaml kubectl get operatorconfigurations postgresql-operator-default-configuration -o yaml
``` ```
Note that the operator first registers the CRD of the `OperatorConfiguration` Note that the operator first attempts to register the CRD of the `OperatorConfiguration`
and then waits for an instance to be created. In between these two event the and then waits for an instance to be created. In between these two event the
operator pod may be failing since it cannot fetch the not-yet-existing operator pod may be failing since it cannot fetch the not-yet-existing
`OperatorConfiguration` instance. `OperatorConfiguration` instance.

View File

@ -51,17 +51,18 @@ func (c *Controller) clusterWorkerID(clusterName spec.NamespacedName) uint32 {
func (c *Controller) createOperatorCRD(crd *apiextv1beta1.CustomResourceDefinition) error { func (c *Controller) createOperatorCRD(crd *apiextv1beta1.CustomResourceDefinition) error {
if _, err := c.KubeClient.CustomResourceDefinitions().Create(crd); err != nil { if _, err := c.KubeClient.CustomResourceDefinitions().Create(crd); err != nil {
if !k8sutil.ResourceAlreadyExists(err) { if k8sutil.ResourceAlreadyExists(err) {
return fmt.Errorf("could not create customResourceDefinition: %v", err) c.logger.Infof("customResourceDefinition %q is already registered and will only be updated", crd.Name)
}
c.logger.Infof("customResourceDefinition %q is already registered and will only be updated", crd.Name)
patch, err := json.Marshal(crd) patch, err := json.Marshal(crd)
if err != nil { if err != nil {
return fmt.Errorf("could not marshal new customResourceDefintion: %v", err) return fmt.Errorf("could not marshal new customResourceDefintion: %v", err)
} }
if _, err := c.KubeClient.CustomResourceDefinitions().Patch(crd.Name, types.MergePatchType, patch); err != nil { if _, err := c.KubeClient.CustomResourceDefinitions().Patch(crd.Name, types.MergePatchType, patch); err != nil {
return fmt.Errorf("could not update customResourceDefinition: %v", err) return fmt.Errorf("could not update customResourceDefinition: %v", err)
}
} else {
c.logger.Errorf("could not create customResourceDefinition %q: %v", crd.Name, err)
} }
} else { } else {
c.logger.Infof("customResourceDefinition %q has been registered", crd.Name) c.logger.Infof("customResourceDefinition %q has been registered", crd.Name)