Skip to content

Many required fields in minimal configuration when it uses inside other operator #1126

@telepenin

Description

@telepenin

Hi, I'm trying to use postgres-operator inside my own. Simple configuration with minimal cluster spec looks like:

apiVersion: project.project.com/v1
kind: CustomCRD
metadata:
  name: project-sample
spec:
  postgres:
    teamId: "acid"
    volume:
      size: 1Gi
    numberOfInstances: 2
    users:
      zalando:  # database owner
        - superuser
        - createdb
      foo_user: []  # role for application foo
    databases:
      foo: zalando  # dbname: owner
    preparedDatabases:
      bar: {}
    postgresql:
      version: "12"

How cluster is created:

import (
	v1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1"
        ...
)

// Reconcilation func:
                 ...
		// Define a new pg cluster
		dep, err := r.createCluster(name, project)
		if err != nil {
			log.Error(err, "Could not generate pg struct")
			return ctrl.Result{}, err
		}
		log.Info("Creating a new PG Cluster")
		err = r.Create(ctx, dep)
		if err != nil {
			log.Error(err, "Failed to create new PG Cluster")
			return ctrl.Result{}, err
		}
                ...

// createCluster returns a Postgresql object
func (r *CustomCRDReconciler) createCluster(name string, m *projectv1.CustomCRD) (*v1.Postgresql, error) {

	postgresql := &v1.Postgresql{
		ObjectMeta: metav1.ObjectMeta{
			Name:      name,
			Namespace: m.Namespace,
		},
		Spec: m.Spec.Postgres,
	}

	err := ctrl.SetControllerReference(m, postgresql, r.Scheme)
	if err != nil {
		return nil, err
	}

	return postgresql, nil
}

What I see in logs:

2020-08-28T10:19:10.487Z	ERROR	controller	Reconciler error	{"reconcilerGroup": "project.project.com", "reconcilerKind": "CustomCRD", "controller": "CustomCRD", "name": "CustomCRD-sample", "namespace": "default", "error": "postgresql.acid.zalan.do \"acid-CustomCRD-sample\" is invalid: [spec.postgresql.parameters: Invalid value: \"null\": spec.postgresql.parameters in body must be of type object: \"null\", spec.resources.limits.memory: Invalid value: \"\": spec.resources.limits.memory in body should match '^(\\d+(e\\d+)?|\\d+(\\.\\d+)?(e\\d+)?[EPTGMK]i?)$', spec.resources.limits.cpu: Invalid value: \"\": spec.resources.limits.cpu in body should match '^(\\d+m|\\d+(\\.\\d{1,3})?)$', spec.resources.requests.cpu: Invalid value: \"\": spec.resources.requests.cpu in body should match '^(\\d+m|\\d+(\\.\\d{1,3})?)$', spec.resources.requests.memory: Invalid value: \"\": spec.resources.requests.memory in body should match '^(\\d+(e\\d+)?|\\d+(\\.\\d+)?(e\\d+)?[EPTGMK]i?)$', spec.clone.cluster: Required value, spec.serviceAnnotations: Invalid value: \"null\": spec.serviceAnnotations in body must be of type object: \"null\", spec.patroni.slots: Invalid value: \"null\": spec.patroni.slots in body must be of type object: \"null\", spec.patroni.pg_hba: Invalid value: \"null\": spec.patroni.pg_hba in body must be of type array: \"null\", spec.patroni.initdb: Invalid value: \"null\": spec.patroni.initdb in body must be of type object: \"null\", spec.podAnnotations: Invalid value: \"null\": spec.podAnnotations in body must be of type object: \"null\", spec.tls: Invalid value: \"null\": spec.tls in body must be of type object: \"null\", spec.standby: Invalid value: \"null\": spec.standby in body must be of type object: \"null\"]"}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions