diff --git a/api/apiv1/design/database.go b/api/apiv1/design/database.go index 4aa3a982..6b3228e2 100644 --- a/api/apiv1/design/database.go +++ b/api/apiv1/design/database.go @@ -1972,6 +1972,14 @@ var SwarmOpts = g.Type("SwarmOpts", func() { }) g.Meta("struct:tag:json", "extra_labels,omitempty") }) + g.Attribute("image", g.String, func() { + g.Description("User-specified container image override. Bypasses manifest version " + + "constraints entirely — the CP will deploy this image without validating it against " + + "the version manifest. The CP verifies the image exists in its registry before accepting " + + "the spec. Clearing this field causes the CP to fall back to the manifest-resolved image on the " + + "next reconcile.") + g.Meta("struct:tag:json", "image,omitempty") + }) }) var OrchestratorOpts = g.Type("OrchestratorOpts", func() { diff --git a/api/apiv1/gen/control_plane/service.go b/api/apiv1/gen/control_plane/service.go index 54e78b37..97e83f3b 100644 --- a/api/apiv1/gen/control_plane/service.go +++ b/api/apiv1/gen/control_plane/service.go @@ -1084,6 +1084,12 @@ type SwarmOpts struct { ExtraNetworks []*ExtraNetworkSpec `json:"extra_networks,omitempty"` // Arbitrary labels to apply to the Docker Swarm service ExtraLabels map[string]string `json:"extra_labels,omitempty"` + // User-specified container image override. Bypasses manifest version + // constraints entirely — the CP will deploy this image without validating it + // against the version manifest. The CP verifies the image exists in its + // registry before accepting the spec. Clearing this field causes the CP to + // fall back to the manifest-resolved image on the next reconcile. + Image *string `json:"image,omitempty"` } // SwitchoverDatabaseNodePayload is the payload type of the control-plane diff --git a/api/apiv1/gen/http/cli/control_plane/cli.go b/api/apiv1/gen/http/cli/control_plane/cli.go index 8e79af05..e60c4c5d 100644 --- a/api/apiv1/gen/http/cli/control_plane/cli.go +++ b/api/apiv1/gen/http/cli/control_plane/cli.go @@ -687,7 +687,7 @@ func controlPlaneUpdateDatabaseUsage() { fmt.Fprintln(os.Stderr) fmt.Fprintln(os.Stderr, "Example:") - fmt.Fprintf(os.Stderr, " %s %s\n", os.Args[0], "control-plane update-database --body '{\n \"spec\": {\n \"database_name\": \"storefront\",\n \"database_users\": [\n {\n \"attributes\": [\n \"LOGIN\",\n \"SUPERUSER\"\n ],\n \"db_owner\": true,\n \"username\": \"admin\"\n }\n ],\n \"nodes\": [\n {\n \"backup_config\": {\n \"repositories\": [\n {\n \"s3_bucket\": \"storefront-db-backups-us-east-1\",\n \"type\": \"s3\"\n }\n ]\n },\n \"host_ids\": [\n \"us-east-1\"\n ],\n \"name\": \"n1\"\n },\n {\n \"backup_config\": {\n \"repositories\": [\n {\n \"s3_bucket\": \"storefront-db-backups-ap-south-1\",\n \"type\": \"s3\"\n }\n ]\n },\n \"host_ids\": [\n \"ap-south-1\"\n ],\n \"name\": \"n2\"\n },\n {\n \"backup_config\": {\n \"repositories\": [\n {\n \"s3_bucket\": \"storefront-db-backups-eu-central-1\",\n \"type\": \"s3\"\n }\n ]\n },\n \"host_ids\": [\n \"eu-central-1\"\n ],\n \"name\": \"n3\",\n \"restore_config\": {\n \"repository\": {\n \"s3_bucket\": \"storefront-db-backups-us-east-1\",\n \"type\": \"s3\"\n },\n \"source_database_id\": \"storefront\",\n \"source_database_name\": \"storefront\",\n \"source_node_name\": \"n1\"\n }\n }\n ],\n \"port\": 5432\n }\n }' --database-id \"76f9b8c0-4958-11f0-a489-3bb29577c696\" --force-update true --remove-host '[\n \"Eveniet possimus dicta laudantium.\",\n \"Repellendus in doloremque.\",\n \"Officia rerum eum nemo autem iste illo.\",\n \"Non libero quibusdam et sapiente.\"\n ]'") + fmt.Fprintf(os.Stderr, " %s %s\n", os.Args[0], "control-plane update-database --body '{\n \"spec\": {\n \"database_name\": \"storefront\",\n \"database_users\": [\n {\n \"attributes\": [\n \"LOGIN\",\n \"SUPERUSER\"\n ],\n \"db_owner\": true,\n \"username\": \"admin\"\n }\n ],\n \"nodes\": [\n {\n \"backup_config\": {\n \"repositories\": [\n {\n \"s3_bucket\": \"storefront-db-backups-us-east-1\",\n \"type\": \"s3\"\n }\n ]\n },\n \"host_ids\": [\n \"us-east-1\"\n ],\n \"name\": \"n1\"\n },\n {\n \"backup_config\": {\n \"repositories\": [\n {\n \"s3_bucket\": \"storefront-db-backups-ap-south-1\",\n \"type\": \"s3\"\n }\n ]\n },\n \"host_ids\": [\n \"ap-south-1\"\n ],\n \"name\": \"n2\"\n },\n {\n \"backup_config\": {\n \"repositories\": [\n {\n \"s3_bucket\": \"storefront-db-backups-eu-central-1\",\n \"type\": \"s3\"\n }\n ]\n },\n \"host_ids\": [\n \"eu-central-1\"\n ],\n \"name\": \"n3\",\n \"restore_config\": {\n \"repository\": {\n \"s3_bucket\": \"storefront-db-backups-us-east-1\",\n \"type\": \"s3\"\n },\n \"source_database_id\": \"storefront\",\n \"source_database_name\": \"storefront\",\n \"source_node_name\": \"n1\"\n }\n }\n ],\n \"port\": 5432\n }\n }' --database-id \"76f9b8c0-4958-11f0-a489-3bb29577c696\" --force-update true --remove-host '[\n \"Inventore officia rerum eum nemo autem.\",\n \"Illo aspernatur non libero quibusdam.\"\n ]'") } func controlPlaneDeleteDatabaseUsage() { diff --git a/api/apiv1/gen/http/control_plane/client/cli.go b/api/apiv1/gen/http/control_plane/client/cli.go index 3db3bf0f..e36f6e44 100644 --- a/api/apiv1/gen/http/control_plane/client/cli.go +++ b/api/apiv1/gen/http/control_plane/client/cli.go @@ -322,7 +322,7 @@ func BuildUpdateDatabasePayload(controlPlaneUpdateDatabaseBody string, controlPl if controlPlaneUpdateDatabaseRemoveHost != "" { err = json.Unmarshal([]byte(controlPlaneUpdateDatabaseRemoveHost), &removeHost) if err != nil { - return nil, fmt.Errorf("invalid JSON for removeHost, \nerror: %s, \nexample of valid JSON:\n%s", err, "'[\n \"Eveniet possimus dicta laudantium.\",\n \"Repellendus in doloremque.\",\n \"Officia rerum eum nemo autem iste illo.\",\n \"Non libero quibusdam et sapiente.\"\n ]'") + return nil, fmt.Errorf("invalid JSON for removeHost, \nerror: %s, \nexample of valid JSON:\n%s", err, "'[\n \"Inventore officia rerum eum nemo autem.\",\n \"Illo aspernatur non libero quibusdam.\"\n ]'") } } } diff --git a/api/apiv1/gen/http/control_plane/client/encode_decode.go b/api/apiv1/gen/http/control_plane/client/encode_decode.go index bd23fb07..4a3e62c1 100644 --- a/api/apiv1/gen/http/control_plane/client/encode_decode.go +++ b/api/apiv1/gen/http/control_plane/client/encode_decode.go @@ -4621,7 +4621,9 @@ func marshalControlplaneSwarmOptsToSwarmOptsRequestBody(v *controlplane.SwarmOpt if v == nil { return nil } - res := &SwarmOptsRequestBody{} + res := &SwarmOptsRequestBody{ + Image: v.Image, + } if v.ExtraVolumes != nil { res.ExtraVolumes = make([]*ExtraVolumesSpecRequestBody, len(v.ExtraVolumes)) for i, val := range v.ExtraVolumes { @@ -5117,7 +5119,9 @@ func marshalSwarmOptsRequestBodyToControlplaneSwarmOpts(v *SwarmOptsRequestBody) if v == nil { return nil } - res := &controlplane.SwarmOpts{} + res := &controlplane.SwarmOpts{ + Image: v.Image, + } if v.ExtraVolumes != nil { res.ExtraVolumes = make([]*controlplane.ExtraVolumesSpec, len(v.ExtraVolumes)) for i, val := range v.ExtraVolumes { @@ -5733,7 +5737,9 @@ func unmarshalSwarmOptsResponseBodyToControlplaneSwarmOpts(v *SwarmOptsResponseB if v == nil { return nil } - res := &controlplane.SwarmOpts{} + res := &controlplane.SwarmOpts{ + Image: v.Image, + } if v.ExtraVolumes != nil { res.ExtraVolumes = make([]*controlplane.ExtraVolumesSpec, len(v.ExtraVolumes)) for i, val := range v.ExtraVolumes { @@ -6226,7 +6232,9 @@ func marshalControlplaneSwarmOptsToSwarmOptsRequestBodyRequestBody(v *controlpla if v == nil { return nil } - res := &SwarmOptsRequestBodyRequestBody{} + res := &SwarmOptsRequestBodyRequestBody{ + Image: v.Image, + } if v.ExtraVolumes != nil { res.ExtraVolumes = make([]*ExtraVolumesSpecRequestBodyRequestBody, len(v.ExtraVolumes)) for i, val := range v.ExtraVolumes { @@ -6724,7 +6732,9 @@ func marshalSwarmOptsRequestBodyRequestBodyToControlplaneSwarmOpts(v *SwarmOptsR if v == nil { return nil } - res := &controlplane.SwarmOpts{} + res := &controlplane.SwarmOpts{ + Image: v.Image, + } if v.ExtraVolumes != nil { res.ExtraVolumes = make([]*controlplane.ExtraVolumesSpec, len(v.ExtraVolumes)) for i, val := range v.ExtraVolumes { diff --git a/api/apiv1/gen/http/control_plane/client/types.go b/api/apiv1/gen/http/control_plane/client/types.go index ad3e3013..607b757b 100644 --- a/api/apiv1/gen/http/control_plane/client/types.go +++ b/api/apiv1/gen/http/control_plane/client/types.go @@ -2064,6 +2064,12 @@ type SwarmOptsRequestBody struct { ExtraNetworks []*ExtraNetworkSpecRequestBody `json:"extra_networks,omitempty"` // Arbitrary labels to apply to the Docker Swarm service ExtraLabels map[string]string `json:"extra_labels,omitempty"` + // User-specified container image override. Bypasses manifest version + // constraints entirely — the CP will deploy this image without validating it + // against the version manifest. The CP verifies the image exists in its + // registry before accepting the spec. Clearing this field causes the CP to + // fall back to the manifest-resolved image on the next reconcile. + Image *string `json:"image,omitempty"` } // ExtraVolumesSpecRequestBody is used to define fields on request body types. @@ -2508,6 +2514,12 @@ type SwarmOptsResponseBody struct { ExtraNetworks []*ExtraNetworkSpecResponseBody `json:"extra_networks,omitempty"` // Arbitrary labels to apply to the Docker Swarm service ExtraLabels map[string]string `json:"extra_labels,omitempty"` + // User-specified container image override. Bypasses manifest version + // constraints entirely — the CP will deploy this image without validating it + // against the version manifest. The CP verifies the image exists in its + // registry before accepting the spec. Clearing this field causes the CP to + // fall back to the manifest-resolved image on the next reconcile. + Image *string `json:"image,omitempty"` } // ExtraVolumesSpecResponseBody is used to define fields on response body types. @@ -2876,6 +2888,12 @@ type SwarmOptsRequestBodyRequestBody struct { ExtraNetworks []*ExtraNetworkSpecRequestBodyRequestBody `json:"extra_networks,omitempty"` // Arbitrary labels to apply to the Docker Swarm service ExtraLabels map[string]string `json:"extra_labels,omitempty"` + // User-specified container image override. Bypasses manifest version + // constraints entirely — the CP will deploy this image without validating it + // against the version manifest. The CP verifies the image exists in its + // registry before accepting the spec. Clearing this field causes the CP to + // fall back to the manifest-resolved image on the next reconcile. + Image *string `json:"image,omitempty"` } // ExtraVolumesSpecRequestBodyRequestBody is used to define fields on request diff --git a/api/apiv1/gen/http/control_plane/server/encode_decode.go b/api/apiv1/gen/http/control_plane/server/encode_decode.go index 56d1bbb8..b41021e9 100644 --- a/api/apiv1/gen/http/control_plane/server/encode_decode.go +++ b/api/apiv1/gen/http/control_plane/server/encode_decode.go @@ -3988,7 +3988,9 @@ func unmarshalSwarmOptsRequestBodyToControlplaneSwarmOpts(v *SwarmOptsRequestBod if v == nil { return nil } - res := &controlplane.SwarmOpts{} + res := &controlplane.SwarmOpts{ + Image: v.Image, + } if v.ExtraVolumes != nil { res.ExtraVolumes = make([]*controlplane.ExtraVolumesSpec, len(v.ExtraVolumes)) for i, val := range v.ExtraVolumes { @@ -4614,7 +4616,9 @@ func marshalControlplaneSwarmOptsToSwarmOptsResponseBody(v *controlplane.SwarmOp if v == nil { return nil } - res := &SwarmOptsResponseBody{} + res := &SwarmOptsResponseBody{ + Image: v.Image, + } if v.ExtraVolumes != nil { res.ExtraVolumes = make([]*ExtraVolumesSpecResponseBody, len(v.ExtraVolumes)) for i, val := range v.ExtraVolumes { @@ -5097,7 +5101,9 @@ func unmarshalSwarmOptsRequestBodyRequestBodyToControlplaneSwarmOpts(v *SwarmOpt if v == nil { return nil } - res := &controlplane.SwarmOpts{} + res := &controlplane.SwarmOpts{ + Image: v.Image, + } if v.ExtraVolumes != nil { res.ExtraVolumes = make([]*controlplane.ExtraVolumesSpec, len(v.ExtraVolumes)) for i, val := range v.ExtraVolumes { diff --git a/api/apiv1/gen/http/control_plane/server/types.go b/api/apiv1/gen/http/control_plane/server/types.go index c61cc5d1..6affc83a 100644 --- a/api/apiv1/gen/http/control_plane/server/types.go +++ b/api/apiv1/gen/http/control_plane/server/types.go @@ -2148,6 +2148,12 @@ type SwarmOptsResponseBody struct { ExtraNetworks []*ExtraNetworkSpecResponseBody `json:"extra_networks,omitempty"` // Arbitrary labels to apply to the Docker Swarm service ExtraLabels map[string]string `json:"extra_labels,omitempty"` + // User-specified container image override. Bypasses manifest version + // constraints entirely — the CP will deploy this image without validating it + // against the version manifest. The CP verifies the image exists in its + // registry before accepting the spec. Clearing this field causes the CP to + // fall back to the manifest-resolved image on the next reconcile. + Image *string `json:"image,omitempty"` } // ExtraVolumesSpecResponseBody is used to define fields on response body types. @@ -2519,6 +2525,12 @@ type SwarmOptsRequestBody struct { ExtraNetworks []*ExtraNetworkSpecRequestBody `json:"extra_networks,omitempty"` // Arbitrary labels to apply to the Docker Swarm service ExtraLabels map[string]string `json:"extra_labels,omitempty"` + // User-specified container image override. Bypasses manifest version + // constraints entirely — the CP will deploy this image without validating it + // against the version manifest. The CP verifies the image exists in its + // registry before accepting the spec. Clearing this field causes the CP to + // fall back to the manifest-resolved image on the next reconcile. + Image *string `json:"image,omitempty"` } // ExtraVolumesSpecRequestBody is used to define fields on request body types. @@ -2886,6 +2898,12 @@ type SwarmOptsRequestBodyRequestBody struct { ExtraNetworks []*ExtraNetworkSpecRequestBodyRequestBody `json:"extra_networks,omitempty"` // Arbitrary labels to apply to the Docker Swarm service ExtraLabels map[string]string `json:"extra_labels,omitempty"` + // User-specified container image override. Bypasses manifest version + // constraints entirely — the CP will deploy this image without validating it + // against the version manifest. The CP verifies the image exists in its + // registry before accepting the spec. Clearing this field causes the CP to + // fall back to the manifest-resolved image on the next reconcile. + Image *string `json:"image,omitempty"` } // ExtraVolumesSpecRequestBodyRequestBody is used to define fields on request diff --git a/api/apiv1/gen/http/openapi.json b/api/apiv1/gen/http/openapi.json index 6ad3ca98..b9b347d3 100644 --- a/api/apiv1/gen/http/openapi.json +++ b/api/apiv1/gen/http/openapi.json @@ -2476,6 +2476,29 @@ "s3_region": "us-east-1", "type": "s3" }, + { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", + "storage-upload-chunk-size": "5MiB" + }, + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "retention_full": 2, + "retention_full_type": "count", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + }, { "azure_account": "pgedge-backups", "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", @@ -2553,6 +2576,29 @@ "s3_region": "us-east-1", "type": "s3" }, + { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", + "storage-upload-chunk-size": "5MiB" + }, + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "retention_full": 2, + "retention_full_type": "count", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + }, { "azure_account": "pgedge-backups", "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", @@ -2632,7 +2678,7 @@ }, "additionalProperties": { "type": "string", - "example": "Beatae quasi ipsum." + "example": "Labore explicabo culpa eos natus aperiam excepturi." } }, "backup_options": { @@ -2643,7 +2689,7 @@ }, "additionalProperties": { "type": "string", - "example": "Et est et dolorem labore explicabo." + "example": "Accusantium ut aperiam qui sed quis architecto." } }, "type": { @@ -2716,7 +2762,7 @@ }, "additionalProperties": { "type": "string", - "example": "Id reprehenderit." + "example": "Unde maiores." } }, "gcs_bucket": { @@ -3189,7 +3235,7 @@ "type": "array", "items": { "type": "string", - "example": "Et odio." + "example": "Id vero suscipit fugiat dignissimos modi accusamus." }, "description": "Existing server to join", "example": [ @@ -3599,6 +3645,53 @@ }, "updated_at": "2025-01-28T10:05:00Z" }, + { + "created_at": "2025-01-28T10:00:00Z", + "database_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "error": "failed to start container: image not found", + "host_id": "host-1", + "service_id": "mcp-server", + "service_instance_id": "mcp-server-host-1", + "state": "running", + "status": { + "addresses": [ + "10.24.34.2", + "i-0123456789abcdef.ec2.internal" + ], + "container_id": "a1b2c3d4e5f6", + "health_check": { + "checked_at": "2025-01-28T10:00:00Z", + "message": "Connection refused", + "status": "healthy" + }, + "image_version": "1.0.0", + "last_health_at": "2025-01-28T10:00:00Z", + "ports": [ + { + "container_port": 8080, + "host_port": 8080, + "name": "web-client" + }, + { + "container_port": 8080, + "host_port": 8080, + "name": "web-client" + }, + { + "container_port": 8080, + "host_port": 8080, + "name": "web-client" + }, + { + "container_port": 8080, + "host_port": 8080, + "name": "web-client" + } + ], + "service_ready": true + }, + "updated_at": "2025-01-28T10:05:00Z" + }, { "created_at": "2025-01-28T10:00:00Z", "database_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", @@ -3850,7 +3943,7 @@ "type": "array", "items": { "type": "string", - "example": "Eum dolores quae minima." + "example": "Aut reprehenderit totam ea." }, "description": "Optional ordered list of database node names. When set, the service's database connection includes only the listed nodes in the specified order.", "example": [ @@ -3936,7 +4029,7 @@ "type": "array", "items": { "type": "string", - "example": "Nobis velit fugiat rerum dicta optio." + "example": "Sint voluptatibus earum occaecati." }, "description": "Additional pg_hba.conf entries for this particular node, one rule per array element. Prepended to the database-level pg_hba_conf entries, so node entries take first-match priority. Entries are inserted between control-plane's system-user rules and its catch-all, and cannot affect control-plane-internal connectivity.", "example": [ @@ -3947,7 +4040,7 @@ "type": "array", "items": { "type": "string", - "example": "Voluptas enim maiores sint voluptatibus earum." + "example": "Reprehenderit error." }, "description": "Additional pg_ident.conf entries for this particular node, one mapping per array element. Prepended to the database-level pg_ident_conf entries.", "example": [ @@ -4078,8 +4171,6 @@ }, "cpus": "500m", "host_ids": [ - "76f9b8c0-4958-11f0-a489-3bb29577c696", - "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], "memory": "500M", @@ -4135,7 +4226,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "patroni_port": 8888, @@ -4195,7 +4287,7 @@ "type": "array", "items": { "type": "string", - "example": "fm9", + "example": "xpe", "minLength": 1, "maxLength": 1024 }, @@ -4212,7 +4304,7 @@ "type": "array", "items": { "type": "string", - "example": "yv", + "example": "n", "minLength": 1, "maxLength": 1024 }, @@ -4272,7 +4364,7 @@ "CREATEDB", "CREATEROLE" ], - "db_owner": false, + "db_owner": true, "password": "secret", "roles": [ "pgedge_superuser" @@ -4285,7 +4377,7 @@ "CREATEDB", "CREATEROLE" ], - "db_owner": false, + "db_owner": true, "password": "secret", "roles": [ "pgedge_superuser" @@ -4298,7 +4390,7 @@ "CREATEDB", "CREATEROLE" ], - "db_owner": false, + "db_owner": true, "password": "secret", "roles": [ "pgedge_superuser" @@ -4470,7 +4562,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "patroni_port": 8888, @@ -4516,132 +4609,136 @@ "source_node_name": "n1" }, "source_node": "n1" - } - ], - "minItems": 1, - "maxItems": 9 - }, - "orchestrator_opts": { - "$ref": "#/definitions/OrchestratorOpts" - }, - "patroni_port": { - "type": "integer", - "description": "The port used by Patroni for this database. If the port is 0, each instance will be assigned a random port. NOTE: This field is not currently supported for Docker Swarm.", - "example": 8888, - "format": "int64", - "minimum": 0, - "maximum": 65535 - }, - "pg_hba_conf": { - "type": "array", - "items": { - "type": "string", - "example": "Ipsa et itaque aut reprehenderit." - }, - "description": "Additional pg_hba.conf entries, one rule per array element. Inserted between control-plane's system-user rules and its catch-all, so they cannot affect control-plane-internal connectivity (Patroni, replication, health checks). Node-level pg_hba_conf entries are prepended to these.", - "example": [ - "hostssl all myapp_user 203.0.113.0/24 scram-sha-256", - "hostssl all alice 0.0.0.0/0 cert clientcert=verify-full map=ssl_users" - ] - }, - "pg_ident_conf": { - "type": "array", - "items": { - "type": "string", - "example": "Ea velit consequatur sequi error et quibusdam." - }, - "description": "Additional pg_ident.conf entries, one mapping per array element. Purely additive; control-plane writes no pg_ident entries of its own. The primary use case is cert auth with map= translating certificate CNs to PostgreSQL usernames.", - "example": [ - "ssl_users CN=alice,O=example alice" - ] - }, - "port": { - "type": "integer", - "description": "The port used by the Postgres database. If the port is 0, each instance will be assigned a random port. If the port is unspecified, the database will not be exposed on any port, dependent on orchestrator support for that feature.", - "example": 5432, - "format": "int64", - "minimum": 0, - "maximum": 65535 - }, - "postgres_version": { - "type": "string", - "description": "The Postgres version in 'major.minor' format.", - "example": "17.6", - "pattern": "^\\d{2}\\.\\d{1,2}$" - }, - "postgresql_conf": { - "type": "object", - "description": "Additional postgresql.conf settings. Will be merged with the settings provided by control-plane.", - "example": { - "max_connections": 1000 - }, - "maxLength": 64, - "additionalProperties": true - }, - "restore_config": { - "$ref": "#/definitions/RestoreConfigSpec" - }, - "scripts": { - "$ref": "#/definitions/DatabaseScripts" - }, - "services": { - "type": "array", - "items": { - "$ref": "#/definitions/ServiceSpec" - }, - "description": "Service instances to run alongside the database (e.g., MCP servers).", - "example": [ + }, { - "config": { - "llm_model": "gpt-4", - "llm_provider": "openai", - "openai_api_key": "sk-..." - }, - "connect_as": "app", - "cpus": "500m", - "database_connection": { - "target_nodes": [ - "n1", - "n2" - ], - "target_session_attrs": "primary" - }, - "host_ids": [ - "76f9b8c0-4958-11f0-a489-3bb29577c696", - "76f9b8c0-4958-11f0-a489-3bb29577c696" - ], - "memory": "512M", - "orchestrator_opts": { - "swarm": { - "extra_labels": { - "traefik.enable": "true", - "traefik.tcp.routers.mydb.rule": "HostSNI(`mydb.example.com`)" - }, - "extra_networks": [ - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" + "backup_config": { + "repositories": [ + { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", + "storage-upload-chunk-size": "5MiB" }, - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "retention_full": 2, + "retention_full_type": "count", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + }, + { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", + "storage-upload-chunk-size": "5MiB" }, - { - "aliases": [ - "pg-db", - "db-alias" + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "retention_full": 2, + "retention_full_type": "count", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + }, + { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", + "storage-upload-chunk-size": "5MiB" + }, + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "retention_full": 2, + "retention_full_type": "count", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + } + ], + "schedules": [ + { + "cron_expression": "0 6 * * ?", + "id": "daily-full-backup", + "type": "full" + }, + { + "cron_expression": "0 6 * * ?", + "id": "daily-full-backup", + "type": "full" + }, + { + "cron_expression": "0 6 * * ?", + "id": "daily-full-backup", + "type": "full" + } + ] + }, + "cpus": "500m", + "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", + "76f9b8c0-4958-11f0-a489-3bb29577c696" + ], + "memory": "500M", + "name": "n1", + "orchestrator_opts": { + "swarm": { + "extra_labels": { + "traefik.enable": "true", + "traefik.tcp.routers.mydb.rule": "HostSNI(`mydb.example.com`)" + }, + "extra_networks": [ + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + }, + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + }, + { + "aliases": [ + "pg-db", + "db-alias" ], "driver_opts": { "com.docker.network.endpoint.expose": "true" @@ -4662,34 +4759,152 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, - "port": 0, - "service_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "service_type": "rag", - "version": "latest" + "patroni_port": 8888, + "pg_hba_conf": [ + "host example myapp_user 10.0.0.0/8 scram-sha-256" + ], + "pg_ident_conf": [ + "ssl_users CN=alice,O=example alice" + ], + "port": 5432, + "postgres_version": "17.6", + "postgresql_conf": { + "max_connections": 1000 + }, + "restore_config": { + "repository": { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + }, + "restore_options": { + "set": "20250505-153628F", + "target": "123456", + "type": "xid" + }, + "source_database_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "source_database_name": "northwind", + "source_node_name": "n1" + }, + "source_node": "n1" }, { - "config": { - "llm_model": "gpt-4", - "llm_provider": "openai", - "openai_api_key": "sk-..." - }, - "connect_as": "app", - "cpus": "500m", - "database_connection": { - "target_nodes": [ - "n1", - "n2" + "backup_config": { + "repositories": [ + { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", + "storage-upload-chunk-size": "5MiB" + }, + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "retention_full": 2, + "retention_full_type": "count", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + }, + { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", + "storage-upload-chunk-size": "5MiB" + }, + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "retention_full": 2, + "retention_full_type": "count", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + }, + { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", + "storage-upload-chunk-size": "5MiB" + }, + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "retention_full": 2, + "retention_full_type": "count", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + } ], - "target_session_attrs": "primary" + "schedules": [ + { + "cron_expression": "0 6 * * ?", + "id": "daily-full-backup", + "type": "full" + }, + { + "cron_expression": "0 6 * * ?", + "id": "daily-full-backup", + "type": "full" + }, + { + "cron_expression": "0 6 * * ?", + "id": "daily-full-backup", + "type": "full" + } + ] }, + "cpus": "500m", "host_ids": [ "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], - "memory": "512M", + "memory": "500M", + "name": "n1", "orchestrator_opts": { "swarm": { "extra_labels": { @@ -4741,14 +4956,128 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, - "port": 0, - "service_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "service_type": "rag", - "version": "latest" - }, + "patroni_port": 8888, + "pg_hba_conf": [ + "host example myapp_user 10.0.0.0/8 scram-sha-256" + ], + "pg_ident_conf": [ + "ssl_users CN=alice,O=example alice" + ], + "port": 5432, + "postgres_version": "17.6", + "postgresql_conf": { + "max_connections": 1000 + }, + "restore_config": { + "repository": { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + }, + "restore_options": { + "set": "20250505-153628F", + "target": "123456", + "type": "xid" + }, + "source_database_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "source_database_name": "northwind", + "source_node_name": "n1" + }, + "source_node": "n1" + } + ], + "minItems": 1, + "maxItems": 9 + }, + "orchestrator_opts": { + "$ref": "#/definitions/OrchestratorOpts" + }, + "patroni_port": { + "type": "integer", + "description": "The port used by Patroni for this database. If the port is 0, each instance will be assigned a random port. NOTE: This field is not currently supported for Docker Swarm.", + "example": 8888, + "format": "int64", + "minimum": 0, + "maximum": 65535 + }, + "pg_hba_conf": { + "type": "array", + "items": { + "type": "string", + "example": "Error et quibusdam veniam debitis non expedita." + }, + "description": "Additional pg_hba.conf entries, one rule per array element. Inserted between control-plane's system-user rules and its catch-all, so they cannot affect control-plane-internal connectivity (Patroni, replication, health checks). Node-level pg_hba_conf entries are prepended to these.", + "example": [ + "hostssl all myapp_user 203.0.113.0/24 scram-sha-256", + "hostssl all alice 0.0.0.0/0 cert clientcert=verify-full map=ssl_users" + ] + }, + "pg_ident_conf": { + "type": "array", + "items": { + "type": "string", + "example": "Eligendi delectus sit quas." + }, + "description": "Additional pg_ident.conf entries, one mapping per array element. Purely additive; control-plane writes no pg_ident entries of its own. The primary use case is cert auth with map= translating certificate CNs to PostgreSQL usernames.", + "example": [ + "ssl_users CN=alice,O=example alice" + ] + }, + "port": { + "type": "integer", + "description": "The port used by the Postgres database. If the port is 0, each instance will be assigned a random port. If the port is unspecified, the database will not be exposed on any port, dependent on orchestrator support for that feature.", + "example": 5432, + "format": "int64", + "minimum": 0, + "maximum": 65535 + }, + "postgres_version": { + "type": "string", + "description": "The Postgres version in 'major.minor' format.", + "example": "17.6", + "pattern": "^\\d{2}\\.\\d{1,2}$" + }, + "postgresql_conf": { + "type": "object", + "description": "Additional postgresql.conf settings. Will be merged with the settings provided by control-plane.", + "example": { + "max_connections": 1000 + }, + "maxLength": 64, + "additionalProperties": true + }, + "restore_config": { + "$ref": "#/definitions/RestoreConfigSpec" + }, + "scripts": { + "$ref": "#/definitions/DatabaseScripts" + }, + "services": { + "type": "array", + "items": { + "$ref": "#/definitions/ServiceSpec" + }, + "description": "Service instances to run alongside the database (e.g., MCP servers).", + "example": [ { "config": { "llm_model": "gpt-4", @@ -4765,6 +5094,7 @@ "target_session_attrs": "primary" }, "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], @@ -4820,7 +5150,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "port": 0, @@ -4844,6 +5175,7 @@ "target_session_attrs": "primary" }, "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], @@ -4899,7 +5231,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "port": 0, @@ -5016,7 +5349,7 @@ "CREATEDB", "CREATEROLE" ], - "db_owner": false, + "db_owner": true, "password": "secret", "roles": [ "pgedge_superuser" @@ -5029,7 +5362,7 @@ "CREATEDB", "CREATEROLE" ], - "db_owner": false, + "db_owner": true, "password": "secret", "roles": [ "pgedge_superuser" @@ -5042,7 +5375,7 @@ "CREATEDB", "CREATEROLE" ], - "db_owner": false, + "db_owner": true, "password": "secret", "roles": [ "pgedge_superuser" @@ -5201,7 +5534,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "patroni_port": 8888, @@ -5397,7 +5731,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "patroni_port": 8888, @@ -5496,7 +5831,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "patroni_port": 8888, @@ -5571,6 +5907,7 @@ "target_session_attrs": "primary" }, "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], @@ -5626,7 +5963,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "port": 0, @@ -5650,6 +5988,7 @@ "target_session_attrs": "primary" }, "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], @@ -5705,7 +6044,89 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." + } + }, + "port": 0, + "service_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "service_type": "rag", + "version": "latest" + }, + { + "config": { + "llm_model": "gpt-4", + "llm_provider": "openai", + "openai_api_key": "sk-..." + }, + "connect_as": "app", + "cpus": "500m", + "database_connection": { + "target_nodes": [ + "n1", + "n2" + ], + "target_session_attrs": "primary" + }, + "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", + "76f9b8c0-4958-11f0-a489-3bb29577c696", + "76f9b8c0-4958-11f0-a489-3bb29577c696" + ], + "memory": "512M", + "orchestrator_opts": { + "swarm": { + "extra_labels": { + "traefik.enable": "true", + "traefik.tcp.routers.mydb.rule": "HostSNI(`mydb.example.com`)" + }, + "extra_networks": [ + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + }, + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + }, + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + } + ], + "extra_volumes": [ + { + "destination_path": "/backups/container", + "host_path": "/Users/user/backups/host" + }, + { + "destination_path": "/backups/container", + "host_path": "/Users/user/backups/host" + }, + { + "destination_path": "/backups/container", + "host_path": "/Users/user/backups/host" + } + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "port": 0, @@ -5790,51 +6211,6 @@ "status_updated_at": "1993-04-25T23:06:28Z", "updated_at": "1981-08-22T23:20:01Z" }, - { - "connection_info": { - "addresses": [ - "10.24.34.2", - "i-0123456789abcdef.ec2.internal" - ], - "port": 5432 - }, - "created_at": "2011-03-15T17:48:48Z", - "error": "failed to get patroni status: connection refused", - "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", - "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", - "node_name": "n1", - "postgres": { - "patroni_paused": false, - "patroni_state": "unknown", - "pending_restart": true, - "role": "primary", - "version": "18.1" - }, - "spock": { - "read_only": "off", - "subscriptions": [ - { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" - }, - { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" - }, - { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" - } - ], - "version": "4.10.0" - }, - "state": "available", - "status_updated_at": "1993-04-25T23:06:28Z", - "updated_at": "1981-08-22T23:20:01Z" - }, { "connection_info": { "addresses": [ @@ -6006,6 +6382,51 @@ "status_updated_at": "1993-04-25T23:06:28Z", "updated_at": "1981-08-22T23:20:01Z" }, + { + "connection_info": { + "addresses": [ + "10.24.34.2", + "i-0123456789abcdef.ec2.internal" + ], + "port": 5432 + }, + "created_at": "2011-03-15T17:48:48Z", + "error": "failed to get patroni status: connection refused", + "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", + "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", + "node_name": "n1", + "postgres": { + "patroni_paused": false, + "patroni_state": "unknown", + "pending_restart": true, + "role": "primary", + "version": "18.1" + }, + "spock": { + "read_only": "off", + "subscriptions": [ + { + "name": "sub_n1n2", + "provider_node": "n2", + "status": "down" + }, + { + "name": "sub_n1n2", + "provider_node": "n2", + "status": "down" + }, + { + "name": "sub_n1n2", + "provider_node": "n2", + "status": "down" + } + ], + "version": "4.10.0" + }, + "state": "available", + "status_updated_at": "1993-04-25T23:06:28Z", + "updated_at": "1981-08-22T23:20:01Z" + }, { "connection_info": { "addresses": [ @@ -6052,7 +6473,7 @@ "updated_at": "1981-08-22T23:20:01Z" } ], - "state": "modifying", + "state": "backing_up", "tenant_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", "updated_at": "2025-01-01T02:30:00Z" }, @@ -6071,7 +6492,7 @@ "type": "array", "items": { "type": "string", - "example": "Delectus dolorum fugit quo aut." + "example": "Explicabo eum dolores quae." }, "description": "The attributes to assign to this database user.", "example": [ @@ -6084,7 +6505,7 @@ "db_owner": { "type": "boolean", "description": "If true, this user will be granted database ownership.", - "example": true + "example": false }, "password": { "type": "string", @@ -6096,7 +6517,7 @@ "type": "array", "items": { "type": "string", - "example": "Asperiores iusto nostrum commodi quidem." + "example": "Molestiae neque." }, "description": "The roles to assign to this database user.", "example": [ @@ -6157,7 +6578,7 @@ "type": "array", "items": { "type": "string", - "example": "Rerum soluta aliquam neque velit." + "example": "Enim dignissimos quasi nihil ea ut minima." }, "description": "Optional network-scoped aliases for the container.", "example": [ @@ -6174,7 +6595,7 @@ }, "additionalProperties": { "type": "string", - "example": "Voluptatem enim dignissimos quasi nihil ea ut." + "example": "Ut quaerat quae fugiat dignissimos qui." } }, "id": { @@ -6312,7 +6733,7 @@ "type": "array", "items": { "type": "string", - "example": "Vero suscipit." + "example": "Officiis explicabo blanditiis." }, "description": "The addresses that this host advertises to client applications.", "example": [ @@ -6367,7 +6788,7 @@ "type": "array", "items": { "type": "string", - "example": "Ut pariatur tenetur est illum." + "example": "Molestiae corporis rem." }, "description": "The addresses that this host advertises to other hosts.", "example": [ @@ -6389,10 +6810,6 @@ "postgres_version": "17.6", "spock_version": "5" }, - { - "postgres_version": "17.6", - "spock_version": "5" - }, { "postgres_version": "17.6", "spock_version": "5" @@ -6506,25 +6923,7 @@ "type": "object", "description": "The status of each component of the host.", "example": { - "Modi accusamus mollitia in.": { - "details": { - "alarms": [ - "3: NOSPACE" - ] - }, - "error": "failed to connect to etcd", - "healthy": false - }, - "Molestiae corporis rem.": { - "details": { - "alarms": [ - "3: NOSPACE" - ] - }, - "error": "failed to connect to etcd", - "healthy": false - }, - "Officiis explicabo blanditiis.": { + "Officiis deleniti laborum ratione id ut.": { "details": { "alarms": [ "3: NOSPACE" @@ -6557,7 +6956,16 @@ }, "example": { "components": { - "Officiis deleniti laborum ratione id ut.": { + "Laborum quasi velit animi sint amet exercitationem.": { + "details": { + "alarms": [ + "3: NOSPACE" + ] + }, + "error": "failed to connect to etcd", + "healthy": false + }, + "Reprehenderit odit cumque excepturi atque.": { "details": { "alarms": [ "3: NOSPACE" @@ -6586,7 +6994,7 @@ "created_at": { "type": "string", "description": "The time that the instance was created.", - "example": "1999-03-24T07:10:36Z", + "example": "1992-11-18T07:12:58Z", "format": "date-time" }, "error": { @@ -6617,7 +7025,7 @@ }, "state": { "type": "string", - "example": "degraded", + "example": "creating", "enum": [ "creating", "modifying", @@ -6633,13 +7041,13 @@ "status_updated_at": { "type": "string", "description": "The time that the instance status information was last updated.", - "example": "2009-05-08T19:19:30Z", + "example": "1989-07-05T19:14:36Z", "format": "date-time" }, "updated_at": { "type": "string", "description": "The time that the instance was last modified.", - "example": "1994-08-13T06:00:30Z", + "example": "1995-01-04T13:11:04Z", "format": "date-time" } }, @@ -6652,7 +7060,7 @@ ], "port": 5432 }, - "created_at": "1993-10-01T19:18:24Z", + "created_at": "2009-12-01T18:01:55Z", "error": "failed to get patroni status: connection refused", "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", @@ -6685,9 +7093,9 @@ ], "version": "4.10.0" }, - "state": "backing_up", - "status_updated_at": "2012-10-31T05:58:43Z", - "updated_at": "2000-05-10T20:48:56Z" + "state": "available", + "status_updated_at": "1990-11-18T02:58:49Z", + "updated_at": "2001-04-12T07:00:21Z" }, "required": [ "id", @@ -6706,7 +7114,7 @@ "type": "array", "items": { "type": "string", - "example": "Voluptatibus minima accusamus impedit ipsa." + "example": "Qui animi quia." }, "description": "The addresses of the host that's running this instance.", "example": [ @@ -6737,7 +7145,7 @@ "patroni_paused": { "type": "boolean", "description": "True if Patroni is paused for this instance.", - "example": false + "example": true }, "patroni_state": { "type": "string", @@ -6762,7 +7170,7 @@ "example": { "patroni_paused": true, "patroni_state": "unknown", - "pending_restart": true, + "pending_restart": false, "role": "primary", "version": "18.1" } @@ -6793,11 +7201,6 @@ "provider_node": "n2", "status": "down" }, - { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" - }, { "name": "sub_n1n2", "provider_node": "n2", @@ -6820,11 +7223,6 @@ "provider_node": "n2", "status": "down" }, - { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" - }, { "name": "sub_n1n2", "provider_node": "n2", @@ -7060,105 +7458,6 @@ "tenant_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", "updated_at": "2025-01-01T02:30:00Z" }, - { - "created_at": "2025-01-01T01:30:00Z", - "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "instances": [ - { - "connection_info": { - "addresses": [ - "10.24.34.2", - "i-0123456789abcdef.ec2.internal" - ], - "port": 5432 - }, - "created_at": "2011-03-15T17:48:48Z", - "error": "failed to get patroni status: connection refused", - "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", - "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", - "node_name": "n1", - "postgres": { - "patroni_paused": false, - "patroni_state": "unknown", - "pending_restart": true, - "role": "primary", - "version": "18.1" - }, - "spock": { - "read_only": "off", - "subscriptions": [ - { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" - }, - { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" - }, - { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" - } - ], - "version": "4.10.0" - }, - "state": "available", - "status_updated_at": "1993-04-25T23:06:28Z", - "updated_at": "1981-08-22T23:20:01Z" - }, - { - "connection_info": { - "addresses": [ - "10.24.34.2", - "i-0123456789abcdef.ec2.internal" - ], - "port": 5432 - }, - "created_at": "2011-03-15T17:48:48Z", - "error": "failed to get patroni status: connection refused", - "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", - "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", - "node_name": "n1", - "postgres": { - "patroni_paused": false, - "patroni_state": "unknown", - "pending_restart": true, - "role": "primary", - "version": "18.1" - }, - "spock": { - "read_only": "off", - "subscriptions": [ - { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" - }, - { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" - }, - { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" - } - ], - "version": "4.10.0" - }, - "state": "available", - "status_updated_at": "1993-04-25T23:06:28Z", - "updated_at": "1981-08-22T23:20:01Z" - } - ], - "state": "restoring", - "tenant_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "updated_at": "2025-01-01T02:30:00Z" - }, { "created_at": "2025-01-01T01:30:00Z", "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", @@ -7911,26 +8210,6 @@ }, "description": "The tasks for the given entity.", "example": [ - { - "completed_at": "2025-06-18T16:52:35Z", - "created_at": "2025-06-18T16:52:05Z", - "database_id": "storefront", - "entity_id": "storefront", - "scope": "database", - "status": "completed", - "task_id": "019783f4-75f4-71e7-85a3-c9b96b345d77", - "type": "create" - }, - { - "completed_at": "2025-06-18T16:52:35Z", - "created_at": "2025-06-18T16:52:05Z", - "database_id": "storefront", - "entity_id": "storefront", - "scope": "database", - "status": "completed", - "task_id": "019783f4-75f4-71e7-85a3-c9b96b345d77", - "type": "create" - }, { "completed_at": "2025-06-18T16:52:35Z", "created_at": "2025-06-18T16:52:05Z", @@ -8043,7 +8322,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } } }, @@ -8141,16 +8421,6 @@ "task_id": "019783f4-75f4-71e7-85a3-c9b96b345d77", "type": "create" }, - { - "completed_at": "2025-06-18T16:52:35Z", - "created_at": "2025-06-18T16:52:05Z", - "database_id": "storefront", - "entity_id": "storefront", - "scope": "database", - "status": "completed", - "task_id": "019783f4-75f4-71e7-85a3-c9b96b345d77", - "type": "create" - }, { "completed_at": "2025-06-18T16:52:35Z", "created_at": "2025-06-18T16:52:05Z", @@ -8254,7 +8524,7 @@ "maxLength": 32, "additionalProperties": { "type": "string", - "example": "Ab fugit." + "example": "Aliquam neque velit." } }, "source_database_id": { @@ -8326,7 +8596,7 @@ "type": "array", "items": { "type": "string", - "example": "Aperiam qui sed quis architecto magnam." + "example": "Quo qui." }, "description": "The nodes to restore. Defaults to all nodes if empty or unspecified.", "example": [ @@ -8367,6 +8637,26 @@ }, "description": "The tasks that will restore each database node.", "example": [ + { + "completed_at": "2025-06-18T16:52:35Z", + "created_at": "2025-06-18T16:52:05Z", + "database_id": "storefront", + "entity_id": "storefront", + "scope": "database", + "status": "completed", + "task_id": "019783f4-75f4-71e7-85a3-c9b96b345d77", + "type": "create" + }, + { + "completed_at": "2025-06-18T16:52:35Z", + "created_at": "2025-06-18T16:52:05Z", + "database_id": "storefront", + "entity_id": "storefront", + "scope": "database", + "status": "completed", + "task_id": "019783f4-75f4-71e7-85a3-c9b96b345d77", + "type": "create" + }, { "completed_at": "2025-06-18T16:52:35Z", "created_at": "2025-06-18T16:52:05Z", @@ -8637,7 +8927,7 @@ }, "additionalProperties": { "type": "string", - "example": "Voluptatem sed voluptatem autem quis." + "example": "Quis praesentium ab fugit ipsam dolores rerum." } }, "gcs_bucket": { @@ -8861,7 +9151,7 @@ "type": "array", "items": { "type": "string", - "example": "Ratione repellat." + "example": "Rerum dicta." }, "description": "The addresses of the host that's running this service instance.", "example": [ @@ -8985,6 +9275,8 @@ }, "description": "The IDs of the hosts that should run this service. One service instance will be created per host.", "example": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], "minItems": 1 @@ -9046,6 +9338,8 @@ "target_session_attrs": "primary" }, "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], "memory": "512M", @@ -9100,7 +9394,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "port": 0, @@ -9175,7 +9470,7 @@ }, "additionalProperties": { "type": "string", - "example": "Ut quaerat quae fugiat dignissimos qui." + "example": "Voluptatem mollitia est." } }, "extra_networks": { @@ -9239,6 +9534,11 @@ } ], "maxItems": 16 + }, + "image": { + "type": "string", + "description": "User-specified container image override. Bypasses manifest version constraints entirely — the CP will deploy this image without validating it against the version manifest. The CP verifies the image exists in its registry before accepting the spec. Clearing this field causes the CP to fall back to the manifest-resolved image on the next reconcile.", + "example": "Delectus dolorum fugit quo aut." } }, "description": "Docker Swarm-specific options.", @@ -9292,7 +9592,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Nostrum commodi." } }, "SwitchoverDatabaseNodeResponse": { @@ -9451,14 +9752,6 @@ "message": "task started", "timestamp": "2025-05-29T15:43:13Z" }, - { - "fields": { - "option.enabled": true, - "status": "creating" - }, - "message": "task started", - "timestamp": "2025-05-29T15:43:13Z" - }, { "fields": { "option.enabled": true, diff --git a/api/apiv1/gen/http/openapi.yaml b/api/apiv1/gen/http/openapi.yaml index 1b86fa7b..f0148e9c 100644 --- a/api/apiv1/gen/http/openapi.yaml +++ b/api/apiv1/gen/http/openapi.yaml @@ -1752,6 +1752,26 @@ definitions: s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 + - azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + storage-upload-chunk-size: 5MiB + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + retention_full: 2 + retention_full_type: count + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 minItems: 1 schedules: type: array @@ -1811,6 +1831,26 @@ definitions: s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 + - azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + storage-upload-chunk-size: 5MiB + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + retention_full: 2 + retention_full_type: count + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 schedules: - cron_expression: 0 6 * * ? id: daily-full-backup @@ -1849,7 +1889,7 @@ definitions: key: value additionalProperties: type: string - example: Beatae quasi ipsum. + example: Labore explicabo culpa eos natus aperiam excepturi. backup_options: type: object description: Options for the backup. @@ -1857,7 +1897,7 @@ definitions: archive-check: "n" additionalProperties: type: string - example: Et est et dolorem labore explicabo. + example: Accusantium ut aperiam qui sed quis architecto. type: type: string description: The type of backup. @@ -1914,7 +1954,7 @@ definitions: storage-upload-chunk-size: 5MiB additionalProperties: type: string - example: Id reprehenderit. + example: Unde maiores. gcs_bucket: type: string description: The GCS bucket name for this repository. Only applies when type = 'gcs'. @@ -2263,7 +2303,7 @@ definitions: type: array items: type: string - example: Et odio. + example: Id vero suscipit fugiat dignissimos modi accusamus. description: Existing server to join example: - http://192.168.1.1:3000 @@ -2583,6 +2623,39 @@ definitions: name: web-client service_ready: true updated_at: "2025-01-28T10:05:00Z" + - created_at: "2025-01-28T10:00:00Z" + database_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + error: 'failed to start container: image not found' + host_id: host-1 + service_id: mcp-server + service_instance_id: mcp-server-host-1 + state: running + status: + addresses: + - 10.24.34.2 + - i-0123456789abcdef.ec2.internal + container_id: a1b2c3d4e5f6 + health_check: + checked_at: "2025-01-28T10:00:00Z" + message: Connection refused + status: healthy + image_version: 1.0.0 + last_health_at: "2025-01-28T10:00:00Z" + ports: + - container_port: 8080 + host_port: 8080 + name: web-client + - container_port: 8080 + host_port: 8080 + name: web-client + - container_port: 8080 + host_port: 8080 + name: web-client + - container_port: 8080 + host_port: 8080 + name: web-client + service_ready: true + updated_at: "2025-01-28T10:05:00Z" spec: $ref: '#/definitions/DatabaseSpec' state: @@ -2727,7 +2800,7 @@ definitions: type: array items: type: string - example: Eum dolores quae minima. + example: Aut reprehenderit totam ea. description: Optional ordered list of database node names. When set, the service's database connection includes only the listed nodes in the specified order. example: - n1 @@ -2795,7 +2868,7 @@ definitions: type: array items: type: string - example: Nobis velit fugiat rerum dicta optio. + example: Sint voluptatibus earum occaecati. description: Additional pg_hba.conf entries for this particular node, one rule per array element. Prepended to the database-level pg_hba_conf entries, so node entries take first-match priority. Entries are inserted between control-plane's system-user rules and its catch-all, and cannot affect control-plane-internal connectivity. example: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -2803,7 +2876,7 @@ definitions: type: array items: type: string - example: Voluptas enim maiores sint voluptatibus earum. + example: Reprehenderit error. description: Additional pg_ident.conf entries for this particular node, one mapping per array element. Prepended to the database-level pg_ident_conf entries. example: - ssl_users CN=alice,O=example alice @@ -2907,8 +2980,6 @@ definitions: cpus: 500m host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - - 76f9b8c0-4958-11f0-a489-3bb29577c696 - - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 500M name: n1 orchestrator_opts: @@ -2942,6 +3013,7 @@ definitions: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -2989,7 +3061,7 @@ definitions: type: array items: type: string - example: fm9 + example: xpe minLength: 1 maxLength: 1024 description: The `post_database_create` script runs once on each primary instance of each node after the application database is created for the first time. Each element of the array is a single SQL statement. These statements run within a transaction in the application database after Spock is initialized, but before subscriptions are created. @@ -3003,7 +3075,7 @@ definitions: type: array items: type: string - example: yv + example: "n" minLength: 1 maxLength: 1024 description: The `post_init` script runs on each primary instance of each node after the instance is created for the first time. Each element of the array is single SQL statement. These statements run within a transaction in the `postgres` database before the users are created, so this feature can be used to create nologin roles that can be assigned to the database users via their `roles` field. @@ -3049,7 +3121,7 @@ definitions: - LOGIN - CREATEDB - CREATEROLE - db_owner: false + db_owner: true password: secret roles: - pgedge_superuser @@ -3058,7 +3130,7 @@ definitions: - LOGIN - CREATEDB - CREATEROLE - db_owner: false + db_owner: true password: secret roles: - pgedge_superuser @@ -3067,7 +3139,7 @@ definitions: - LOGIN - CREATEDB - CREATEROLE - db_owner: false + db_owner: true password: secret roles: - pgedge_superuser @@ -3193,6 +3265,7 @@ definitions: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -3229,78 +3302,84 @@ definitions: source_database_name: northwind source_node_name: n1 source_node: n1 - minItems: 1 - maxItems: 9 - orchestrator_opts: - $ref: '#/definitions/OrchestratorOpts' - patroni_port: - type: integer - description: 'The port used by Patroni for this database. If the port is 0, each instance will be assigned a random port. NOTE: This field is not currently supported for Docker Swarm.' - example: 8888 - format: int64 - minimum: 0 - maximum: 65535 - pg_hba_conf: - type: array - items: - type: string - example: Ipsa et itaque aut reprehenderit. - description: Additional pg_hba.conf entries, one rule per array element. Inserted between control-plane's system-user rules and its catch-all, so they cannot affect control-plane-internal connectivity (Patroni, replication, health checks). Node-level pg_hba_conf entries are prepended to these. - example: - - hostssl all myapp_user 203.0.113.0/24 scram-sha-256 - - hostssl all alice 0.0.0.0/0 cert clientcert=verify-full map=ssl_users - pg_ident_conf: - type: array - items: - type: string - example: Ea velit consequatur sequi error et quibusdam. - description: Additional pg_ident.conf entries, one mapping per array element. Purely additive; control-plane writes no pg_ident entries of its own. The primary use case is cert auth with map= translating certificate CNs to PostgreSQL usernames. - example: - - ssl_users CN=alice,O=example alice - port: - type: integer - description: The port used by the Postgres database. If the port is 0, each instance will be assigned a random port. If the port is unspecified, the database will not be exposed on any port, dependent on orchestrator support for that feature. - example: 5432 - format: int64 - minimum: 0 - maximum: 65535 - postgres_version: - type: string - description: The Postgres version in 'major.minor' format. - example: "17.6" - pattern: ^\d{2}\.\d{1,2}$ - postgresql_conf: - type: object - description: Additional postgresql.conf settings. Will be merged with the settings provided by control-plane. - example: - max_connections: 1000 - maxLength: 64 - additionalProperties: true - restore_config: - $ref: '#/definitions/RestoreConfigSpec' - scripts: - $ref: '#/definitions/DatabaseScripts' - services: - type: array - items: - $ref: '#/definitions/ServiceSpec' - description: Service instances to run alongside the database (e.g., MCP servers). - example: - - config: - llm_model: gpt-4 - llm_provider: openai - openai_api_key: sk-... - connect_as: app + - backup_config: + repositories: + - azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + storage-upload-chunk-size: 5MiB + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + retention_full: 2 + retention_full_type: count + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 + - azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + storage-upload-chunk-size: 5MiB + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + retention_full: 2 + retention_full_type: count + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 + - azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + storage-upload-chunk-size: 5MiB + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + retention_full: 2 + retention_full_type: count + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 + schedules: + - cron_expression: 0 6 * * ? + id: daily-full-backup + type: full + - cron_expression: 0 6 * * ? + id: daily-full-backup + type: full + - cron_expression: 0 6 * * ? + id: daily-full-backup + type: full cpus: 500m - database_connection: - target_nodes: - - n1 - - n2 - target_session_attrs: primary host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 - memory: 512M + memory: 500M + name: n1 orchestrator_opts: swarm: extra_labels: @@ -3332,25 +3411,121 @@ definitions: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host - port: 0 - service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - service_type: rag - version: latest - - config: - llm_model: gpt-4 - llm_provider: openai - openai_api_key: sk-... - connect_as: app + image: Dignissimos incidunt in quas totam eveniet possimus. + patroni_port: 8888 + pg_hba_conf: + - host example myapp_user 10.0.0.0/8 scram-sha-256 + pg_ident_conf: + - ssl_users CN=alice,O=example alice + port: 5432 + postgres_version: "17.6" + postgresql_conf: + max_connections: 1000 + restore_config: + repository: + azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 + restore_options: + set: 20250505-153628F + target: "123456" + type: xid + source_database_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + source_database_name: northwind + source_node_name: n1 + source_node: n1 + - backup_config: + repositories: + - azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + storage-upload-chunk-size: 5MiB + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + retention_full: 2 + retention_full_type: count + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 + - azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + storage-upload-chunk-size: 5MiB + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + retention_full: 2 + retention_full_type: count + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 + - azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + storage-upload-chunk-size: 5MiB + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + retention_full: 2 + retention_full_type: count + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 + schedules: + - cron_expression: 0 6 * * ? + id: daily-full-backup + type: full + - cron_expression: 0 6 * * ? + id: daily-full-backup + type: full + - cron_expression: 0 6 * * ? + id: daily-full-backup + type: full cpus: 500m - database_connection: - target_nodes: - - n1 - - n2 - target_session_attrs: primary host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 - memory: 512M + memory: 500M + name: n1 orchestrator_opts: swarm: extra_labels: @@ -3382,10 +3557,100 @@ definitions: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host - port: 0 - service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - service_type: rag - version: latest + image: Dignissimos incidunt in quas totam eveniet possimus. + patroni_port: 8888 + pg_hba_conf: + - host example myapp_user 10.0.0.0/8 scram-sha-256 + pg_ident_conf: + - ssl_users CN=alice,O=example alice + port: 5432 + postgres_version: "17.6" + postgresql_conf: + max_connections: 1000 + restore_config: + repository: + azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 + restore_options: + set: 20250505-153628F + target: "123456" + type: xid + source_database_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + source_database_name: northwind + source_node_name: n1 + source_node: n1 + minItems: 1 + maxItems: 9 + orchestrator_opts: + $ref: '#/definitions/OrchestratorOpts' + patroni_port: + type: integer + description: 'The port used by Patroni for this database. If the port is 0, each instance will be assigned a random port. NOTE: This field is not currently supported for Docker Swarm.' + example: 8888 + format: int64 + minimum: 0 + maximum: 65535 + pg_hba_conf: + type: array + items: + type: string + example: Error et quibusdam veniam debitis non expedita. + description: Additional pg_hba.conf entries, one rule per array element. Inserted between control-plane's system-user rules and its catch-all, so they cannot affect control-plane-internal connectivity (Patroni, replication, health checks). Node-level pg_hba_conf entries are prepended to these. + example: + - hostssl all myapp_user 203.0.113.0/24 scram-sha-256 + - hostssl all alice 0.0.0.0/0 cert clientcert=verify-full map=ssl_users + pg_ident_conf: + type: array + items: + type: string + example: Eligendi delectus sit quas. + description: Additional pg_ident.conf entries, one mapping per array element. Purely additive; control-plane writes no pg_ident entries of its own. The primary use case is cert auth with map= translating certificate CNs to PostgreSQL usernames. + example: + - ssl_users CN=alice,O=example alice + port: + type: integer + description: The port used by the Postgres database. If the port is 0, each instance will be assigned a random port. If the port is unspecified, the database will not be exposed on any port, dependent on orchestrator support for that feature. + example: 5432 + format: int64 + minimum: 0 + maximum: 65535 + postgres_version: + type: string + description: The Postgres version in 'major.minor' format. + example: "17.6" + pattern: ^\d{2}\.\d{1,2}$ + postgresql_conf: + type: object + description: Additional postgresql.conf settings. Will be merged with the settings provided by control-plane. + example: + max_connections: 1000 + maxLength: 64 + additionalProperties: true + restore_config: + $ref: '#/definitions/RestoreConfigSpec' + scripts: + $ref: '#/definitions/DatabaseScripts' + services: + type: array + items: + $ref: '#/definitions/ServiceSpec' + description: Service instances to run alongside the database (e.g., MCP servers). + example: - config: llm_model: gpt-4 llm_provider: openai @@ -3400,6 +3665,7 @@ definitions: host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -3432,6 +3698,7 @@ definitions: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -3450,6 +3717,7 @@ definitions: host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -3482,6 +3750,7 @@ definitions: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -3571,7 +3840,7 @@ definitions: - LOGIN - CREATEDB - CREATEROLE - db_owner: false + db_owner: true password: secret roles: - pgedge_superuser @@ -3580,7 +3849,7 @@ definitions: - LOGIN - CREATEDB - CREATEROLE - db_owner: false + db_owner: true password: secret roles: - pgedge_superuser @@ -3589,7 +3858,7 @@ definitions: - LOGIN - CREATEDB - CREATEROLE - db_owner: false + db_owner: true password: secret roles: - pgedge_superuser @@ -3705,6 +3974,7 @@ definitions: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -3850,6 +4120,7 @@ definitions: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -3917,6 +4188,7 @@ definitions: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. patroni_port: 8888 pg_hba_conf: - hostssl all myapp_user 203.0.113.0/24 scram-sha-256 @@ -3977,6 +4249,59 @@ definitions: host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 + memory: 512M + orchestrator_opts: + swarm: + extra_labels: + traefik.enable: "true" + traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) + extra_networks: + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + extra_volumes: + - destination_path: /backups/container + host_path: /Users/user/backups/host + - destination_path: /backups/container + host_path: /Users/user/backups/host + - destination_path: /backups/container + host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. + port: 0 + service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + service_type: rag + version: latest + - config: + llm_model: gpt-4 + llm_provider: openai + openai_api_key: sk-... + connect_as: app + cpus: 500m + database_connection: + target_nodes: + - n1 + - n2 + target_session_attrs: primary + host_ids: + - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -4009,6 +4334,7 @@ definitions: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -4027,6 +4353,7 @@ definitions: host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -4059,6 +4386,7 @@ definitions: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -4152,38 +4480,6 @@ definitions: state: available status_updated_at: "1993-04-25T23:06:28Z" updated_at: "1981-08-22T23:20:01Z" - - connection_info: - addresses: - - 10.24.34.2 - - i-0123456789abcdef.ec2.internal - port: 5432 - created_at: "2011-03-15T17:48:48Z" - error: 'failed to get patroni status: connection refused' - host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec - id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d - node_name: n1 - postgres: - patroni_paused: false - patroni_state: unknown - pending_restart: true - role: primary - version: "18.1" - spock: - read_only: "off" - subscriptions: - - name: sub_n1n2 - provider_node: n2 - status: down - - name: sub_n1n2 - provider_node: n2 - status: down - - name: sub_n1n2 - provider_node: n2 - status: down - version: 4.10.0 - state: available - status_updated_at: "1993-04-25T23:06:28Z" - updated_at: "1981-08-22T23:20:01Z" state: type: string description: Current state of the database. @@ -4309,7 +4605,39 @@ definitions: state: available status_updated_at: "1993-04-25T23:06:28Z" updated_at: "1981-08-22T23:20:01Z" - state: modifying + - connection_info: + addresses: + - 10.24.34.2 + - i-0123456789abcdef.ec2.internal + port: 5432 + created_at: "2011-03-15T17:48:48Z" + error: 'failed to get patroni status: connection refused' + host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec + id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d + node_name: n1 + postgres: + patroni_paused: false + patroni_state: unknown + pending_restart: true + role: primary + version: "18.1" + spock: + read_only: "off" + subscriptions: + - name: sub_n1n2 + provider_node: n2 + status: down + - name: sub_n1n2 + provider_node: n2 + status: down + - name: sub_n1n2 + provider_node: n2 + status: down + version: 4.10.0 + state: available + status_updated_at: "1993-04-25T23:06:28Z" + updated_at: "1981-08-22T23:20:01Z" + state: backing_up tenant_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 updated_at: "2025-01-01T02:30:00Z" required: @@ -4325,7 +4653,7 @@ definitions: type: array items: type: string - example: Delectus dolorum fugit quo aut. + example: Explicabo eum dolores quae. description: The attributes to assign to this database user. example: - LOGIN @@ -4335,7 +4663,7 @@ definitions: db_owner: type: boolean description: If true, this user will be granted database ownership. - example: true + example: false password: type: string description: The password for this database user. This field will be excluded from the response of all endpoints. It can also be omitted from update requests to keep the current value. @@ -4345,7 +4673,7 @@ definitions: type: array items: type: string - example: Asperiores iusto nostrum commodi quidem. + example: Molestiae neque. description: The roles to assign to this database user. example: - pgedge_superuser @@ -4390,7 +4718,7 @@ definitions: type: array items: type: string - example: Rerum soluta aliquam neque velit. + example: Enim dignissimos quasi nihil ea ut minima. description: Optional network-scoped aliases for the container. example: - pg-db @@ -4403,7 +4731,7 @@ definitions: com.docker.network.endpoint.expose: "true" additionalProperties: type: string - example: Voluptatem enim dignissimos quasi nihil ea ut. + example: Ut quaerat quae fugiat dignissimos qui. id: type: string description: The name or ID of the network to connect to. @@ -4507,7 +4835,7 @@ definitions: type: array items: type: string - example: Vero suscipit. + example: Officiis explicabo blanditiis. description: The addresses that this host advertises to client applications. example: - 10.24.34.2 @@ -4550,7 +4878,7 @@ definitions: type: array items: type: string - example: Ut pariatur tenetur est illum. + example: Molestiae corporis rem. description: The addresses that this host advertises to other hosts. example: - 10.24.34.2 @@ -4567,8 +4895,6 @@ definitions: spock_version: "5" - postgres_version: "17.6" spock_version: "5" - - postgres_version: "17.6" - spock_version: "5" example: client_addresses: - 10.24.34.2 @@ -4647,19 +4973,7 @@ definitions: type: object description: The status of each component of the host. example: - Modi accusamus mollitia in.: - details: - alarms: - - '3: NOSPACE' - error: failed to connect to etcd - healthy: false - Molestiae corporis rem.: - details: - alarms: - - '3: NOSPACE' - error: failed to connect to etcd - healthy: false - Officiis explicabo blanditiis.: + Officiis deleniti laborum ratione id ut.: details: alarms: - '3: NOSPACE' @@ -4682,7 +4996,13 @@ definitions: format: date-time example: components: - Officiis deleniti laborum ratione id ut.: + Laborum quasi velit animi sint amet exercitationem.: + details: + alarms: + - '3: NOSPACE' + error: failed to connect to etcd + healthy: false + Reprehenderit odit cumque excepturi atque.: details: alarms: - '3: NOSPACE' @@ -4703,7 +5023,7 @@ definitions: created_at: type: string description: The time that the instance was created. - example: "1999-03-24T07:10:36Z" + example: "1992-11-18T07:12:58Z" format: date-time error: type: string @@ -4727,7 +5047,7 @@ definitions: $ref: '#/definitions/InstanceSpockStatus' state: type: string - example: degraded + example: creating enum: - creating - modifying @@ -4741,12 +5061,12 @@ definitions: status_updated_at: type: string description: The time that the instance status information was last updated. - example: "2009-05-08T19:19:30Z" + example: "1989-07-05T19:14:36Z" format: date-time updated_at: type: string description: The time that the instance was last modified. - example: "1994-08-13T06:00:30Z" + example: "1995-01-04T13:11:04Z" format: date-time description: An instance of pgEdge Postgres running on a host. example: @@ -4755,7 +5075,7 @@ definitions: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 - created_at: "1993-10-01T19:18:24Z" + created_at: "2009-12-01T18:01:55Z" error: 'failed to get patroni status: connection refused' host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d @@ -4779,9 +5099,9 @@ definitions: provider_node: n2 status: down version: 4.10.0 - state: backing_up - status_updated_at: "2012-10-31T05:58:43Z" - updated_at: "2000-05-10T20:48:56Z" + state: available + status_updated_at: "1990-11-18T02:58:49Z" + updated_at: "2001-04-12T07:00:21Z" required: - id - host_id @@ -4797,7 +5117,7 @@ definitions: type: array items: type: string - example: Voluptatibus minima accusamus impedit ipsa. + example: Qui animi quia. description: The addresses of the host that's running this instance. example: - 10.24.34.2 @@ -4820,7 +5140,7 @@ definitions: patroni_paused: type: boolean description: True if Patroni is paused for this instance. - example: false + example: true patroni_state: type: string example: unknown @@ -4839,7 +5159,7 @@ definitions: example: patroni_paused: true patroni_state: unknown - pending_restart: true + pending_restart: false role: primary version: "18.1" InstanceSpockStatus: @@ -4865,9 +5185,6 @@ definitions: - name: sub_n1n2 provider_node: n2 status: down - - name: sub_n1n2 - provider_node: n2 - status: down version: type: string description: The version of Spock for this instance. @@ -4882,9 +5199,6 @@ definitions: - name: sub_n1n2 provider_node: n2 status: down - - name: sub_n1n2 - provider_node: n2 - status: down version: 4.10.0 InstanceSubscription: title: InstanceSubscription @@ -5125,76 +5439,6 @@ definitions: state: restoring tenant_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 updated_at: "2025-01-01T02:30:00Z" - - created_at: "2025-01-01T01:30:00Z" - id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - instances: - - connection_info: - addresses: - - 10.24.34.2 - - i-0123456789abcdef.ec2.internal - port: 5432 - created_at: "2011-03-15T17:48:48Z" - error: 'failed to get patroni status: connection refused' - host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec - id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d - node_name: n1 - postgres: - patroni_paused: false - patroni_state: unknown - pending_restart: true - role: primary - version: "18.1" - spock: - read_only: "off" - subscriptions: - - name: sub_n1n2 - provider_node: n2 - status: down - - name: sub_n1n2 - provider_node: n2 - status: down - - name: sub_n1n2 - provider_node: n2 - status: down - version: 4.10.0 - state: available - status_updated_at: "1993-04-25T23:06:28Z" - updated_at: "1981-08-22T23:20:01Z" - - connection_info: - addresses: - - 10.24.34.2 - - i-0123456789abcdef.ec2.internal - port: 5432 - created_at: "2011-03-15T17:48:48Z" - error: 'failed to get patroni status: connection refused' - host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec - id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d - node_name: n1 - postgres: - patroni_paused: false - patroni_state: unknown - pending_restart: true - role: primary - version: "18.1" - spock: - read_only: "off" - subscriptions: - - name: sub_n1n2 - provider_node: n2 - status: down - - name: sub_n1n2 - provider_node: n2 - status: down - - name: sub_n1n2 - provider_node: n2 - status: down - version: 4.10.0 - state: available - status_updated_at: "1993-04-25T23:06:28Z" - updated_at: "1981-08-22T23:20:01Z" - state: restoring - tenant_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - updated_at: "2025-01-01T02:30:00Z" example: databases: - created_at: "2025-06-17T20:05:10Z" @@ -5658,22 +5902,6 @@ definitions: status: completed task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 type: create - - completed_at: "2025-06-18T16:52:35Z" - created_at: "2025-06-18T16:52:05Z" - database_id: storefront - entity_id: storefront - scope: database - status: completed - task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 - type: create - - completed_at: "2025-06-18T16:52:35Z" - created_at: "2025-06-18T16:52:05Z" - database_id: storefront - entity_id: storefront - scope: database - status: completed - task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 - type: create example: tasks: - completed_at: "2025-06-18T17:54:36Z" @@ -5733,6 +5961,7 @@ definitions: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. PgEdgeVersion: title: PgEdgeVersion type: object @@ -5816,14 +6045,6 @@ definitions: status: completed task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 type: create - - completed_at: "2025-06-18T16:52:35Z" - created_at: "2025-06-18T16:52:05Z" - database_id: storefront - entity_id: storefront - scope: database - status: completed - task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 - type: create example: task: completed_at: "2025-06-18T16:52:35Z" @@ -5895,7 +6116,7 @@ definitions: maxLength: 32 additionalProperties: type: string - example: Ab fugit. + example: Aliquam neque velit. source_database_id: type: string description: The ID of the database to restore this database from. @@ -5954,7 +6175,7 @@ definitions: type: array items: type: string - example: Aperiam qui sed quis architecto magnam. + example: Quo qui. description: The nodes to restore. Defaults to all nodes if empty or unspecified. example: - n1 @@ -5999,6 +6220,22 @@ definitions: status: completed task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 type: create + - completed_at: "2025-06-18T16:52:35Z" + created_at: "2025-06-18T16:52:05Z" + database_id: storefront + entity_id: storefront + scope: database + status: completed + task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 + type: create + - completed_at: "2025-06-18T16:52:35Z" + created_at: "2025-06-18T16:52:05Z" + database_id: storefront + entity_id: storefront + scope: database + status: completed + task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 + type: create task: $ref: '#/definitions/Task' example: @@ -6178,7 +6415,7 @@ definitions: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab additionalProperties: type: string - example: Voluptatem sed voluptatem autem quis. + example: Quis praesentium ab fugit ipsam dolores rerum. gcs_bucket: type: string description: The GCS bucket name for this repository. Only applies when type = 'gcs'. @@ -6358,7 +6595,7 @@ definitions: type: array items: type: string - example: Ratione repellat. + example: Rerum dicta. description: The addresses of the host that's running this service instance. example: - 10.24.34.2 @@ -6450,6 +6687,8 @@ definitions: description: The IDs of the hosts that should run this service. One service instance will be created per host. example: - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 minItems: 1 memory: type: string @@ -6498,6 +6737,8 @@ definitions: target_session_attrs: primary host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -6530,6 +6771,7 @@ definitions: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -6586,7 +6828,7 @@ definitions: traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) additionalProperties: type: string - example: Ut quaerat quae fugiat dignissimos qui. + example: Voluptatem mollitia est. extra_networks: type: array items: @@ -6625,6 +6867,10 @@ definitions: - destination_path: /backups/container host_path: /Users/user/backups/host maxItems: 16 + image: + type: string + description: User-specified container image override. Bypasses manifest version constraints entirely — the CP will deploy this image without validating it against the version manifest. The CP verifies the image exists in its registry before accepting the spec. Clearing this field causes the CP to fall back to the manifest-resolved image on the next reconcile. + example: Delectus dolorum fugit quo aut. description: Docker Swarm-specific options. example: extra_labels: @@ -6656,6 +6902,7 @@ definitions: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Nostrum commodi. SwitchoverDatabaseNodeResponse: title: SwitchoverDatabaseNodeResponse type: object @@ -6786,11 +7033,6 @@ definitions: status: creating message: task started timestamp: "2025-05-29T15:43:13Z" - - fields: - option.enabled: true - status: creating - message: task started - timestamp: "2025-05-29T15:43:13Z" last_entry_id: type: string description: The ID of the last entry in the task log. diff --git a/api/apiv1/gen/http/openapi3.json b/api/apiv1/gen/http/openapi3.json index cd629941..4e0fae0c 100644 --- a/api/apiv1/gen/http/openapi3.json +++ b/api/apiv1/gen/http/openapi3.json @@ -1750,21 +1750,21 @@ "type": "array", "items": { "type": "string", - "example": "Qui excepturi debitis aperiam rerum at." + "example": "Possimus sit commodi in dolor unde." }, "description": "Host IDs to treat as removed during this update. Events targeting these hosts will be skipped.", "example": [ - "Facilis autem molestiae voluptatem.", - "Dolorem sed alias est mollitia.", - "Possimus id laudantium sed delectus.", - "Ut distinctio expedita." + "Ut sint cumque quia non enim.", + "Doloremque nam.", + "Sed esse id natus aut.", + "Minus sint totam et et." ] }, "example": [ - "Esse odit placeat quod facere.", - "Sit commodi in dolor unde optio illo.", - "Sint cumque quia non.", - "Perferendis doloremque nam cumque." + "Quia fuga qui id libero dignissimos voluptates.", + "Numquam perspiciatis et exercitationem sequi saepe velit.", + "Ex sint dolorum vel.", + "Laboriosam aut dolorum est." ] }, { @@ -5553,52 +5553,6 @@ }, "description": "The repositories for this backup configuration.", "example": [ - { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", - "storage-upload-chunk-size": "5MiB" - }, - "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "gcs_endpoint": "localhost", - "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", - "id": "f6b84a99-5e91-4203-be1e-131fe82e5984", - "retention_full": 2, - "retention_full_type": "count", - "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "s3_endpoint": "s3.us-east-1.amazonaws.com", - "s3_key": "AKIAIOSFODNN7EXAMPLE", - "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "s3_region": "us-east-1", - "type": "s3" - }, - { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", - "storage-upload-chunk-size": "5MiB" - }, - "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "gcs_endpoint": "localhost", - "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", - "id": "f6b84a99-5e91-4203-be1e-131fe82e5984", - "retention_full": 2, - "retention_full_type": "count", - "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "s3_endpoint": "s3.us-east-1.amazonaws.com", - "s3_key": "AKIAIOSFODNN7EXAMPLE", - "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "s3_region": "us-east-1", - "type": "s3" - }, { "azure_account": "pgedge-backups", "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", @@ -5676,29 +5630,6 @@ "s3_region": "us-east-1", "type": "s3" }, - { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", - "storage-upload-chunk-size": "5MiB" - }, - "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "gcs_endpoint": "localhost", - "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", - "id": "f6b84a99-5e91-4203-be1e-131fe82e5984", - "retention_full": 2, - "retention_full_type": "count", - "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "s3_endpoint": "s3.us-east-1.amazonaws.com", - "s3_key": "AKIAIOSFODNN7EXAMPLE", - "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "s3_region": "us-east-1", - "type": "s3" - }, { "azure_account": "pgedge-backups", "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", @@ -5776,7 +5707,7 @@ }, "additionalProperties": { "type": "string", - "example": "Ipsa et et." + "example": "Natus qui veniam exercitationem placeat temporibus." } }, "backup_options": { @@ -5787,7 +5718,7 @@ }, "additionalProperties": { "type": "string", - "example": "Et nam quo qui qui natus." + "example": "Facilis repudiandae ab sed exercitationem." } }, "type": { @@ -5859,7 +5790,7 @@ }, "additionalProperties": { "type": "string", - "example": "Ut dolorem." + "example": "Aut doloribus rem culpa ullam minus dolore." } }, "gcs_bucket": { @@ -6449,7 +6380,7 @@ "type": "array", "items": { "type": "string", - "example": "k0t", + "example": "o47", "minLength": 3, "maxLength": 128 }, @@ -6501,7 +6432,7 @@ "type": "array", "items": { "type": "string", - "example": "Placeat temporibus aut." + "example": "Itaque placeat." }, "description": "Existing server to join", "example": [ @@ -6877,7 +6808,7 @@ ], "port": 5432 }, - "created_at": "2001-11-21T07:07:15Z", + "created_at": "1984-01-30T10:40:13Z", "error": "failed to get patroni status: connection refused", "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", @@ -6885,7 +6816,7 @@ "postgres": { "patroni_paused": true, "patroni_state": "unknown", - "pending_restart": false, + "pending_restart": true, "role": "primary", "version": "18.1" }, @@ -6910,9 +6841,9 @@ ], "version": "4.10.0" }, - "state": "degraded", - "status_updated_at": "1990-07-23T01:22:30Z", - "updated_at": "2013-01-29T23:51:44Z" + "state": "modifying", + "status_updated_at": "1976-03-01T20:13:25Z", + "updated_at": "1996-05-27T17:04:41Z" }, { "connection_info": { @@ -6922,7 +6853,7 @@ ], "port": 5432 }, - "created_at": "2001-11-21T07:07:15Z", + "created_at": "1984-01-30T10:40:13Z", "error": "failed to get patroni status: connection refused", "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", @@ -6930,7 +6861,7 @@ "postgres": { "patroni_paused": true, "patroni_state": "unknown", - "pending_restart": false, + "pending_restart": true, "role": "primary", "version": "18.1" }, @@ -6955,109 +6886,103 @@ ], "version": "4.10.0" }, - "state": "degraded", - "status_updated_at": "1990-07-23T01:22:30Z", - "updated_at": "2013-01-29T23:51:44Z" - }, + "state": "modifying", + "status_updated_at": "1976-03-01T20:13:25Z", + "updated_at": "1996-05-27T17:04:41Z" + } + ] + }, + "service_instances": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ServiceInstance" + }, + "description": "Service instances running alongside this database.", + "example": [ { - "connection_info": { + "created_at": "2025-01-28T10:00:00Z", + "database_id": "production", + "error": "failed to start container: image not found", + "host_id": "host-1", + "service_id": "mcp-server", + "service_instance_id": "mcp-server-host-1", + "state": "running", + "status": { "addresses": [ "10.24.34.2", "i-0123456789abcdef.ec2.internal" ], - "port": 5432 - }, - "created_at": "2001-11-21T07:07:15Z", - "error": "failed to get patroni status: connection refused", - "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", - "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", - "node_name": "n1", - "postgres": { - "patroni_paused": true, - "patroni_state": "unknown", - "pending_restart": false, - "role": "primary", - "version": "18.1" - }, - "spock": { - "read_only": "off", - "subscriptions": [ + "container_id": "a1b2c3d4e5f6", + "health_check": { + "checked_at": "2025-01-28T10:00:00Z", + "message": "Connection refused", + "status": "healthy" + }, + "image_version": "1.0.0", + "last_health_at": "2025-01-28T10:00:00Z", + "ports": [ { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" + "container_port": 8080, + "host_port": 8080, + "name": "web-client" }, { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" + "container_port": 8080, + "host_port": 8080, + "name": "web-client" }, { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" + "container_port": 8080, + "host_port": 8080, + "name": "web-client" } ], - "version": "4.10.0" + "service_ready": true }, - "state": "degraded", - "status_updated_at": "1990-07-23T01:22:30Z", - "updated_at": "2013-01-29T23:51:44Z" + "updated_at": "2025-01-28T10:05:00Z" }, { - "connection_info": { + "created_at": "2025-01-28T10:00:00Z", + "database_id": "production", + "error": "failed to start container: image not found", + "host_id": "host-1", + "service_id": "mcp-server", + "service_instance_id": "mcp-server-host-1", + "state": "running", + "status": { "addresses": [ "10.24.34.2", "i-0123456789abcdef.ec2.internal" ], - "port": 5432 - }, - "created_at": "2001-11-21T07:07:15Z", - "error": "failed to get patroni status: connection refused", - "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", - "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", - "node_name": "n1", - "postgres": { - "patroni_paused": true, - "patroni_state": "unknown", - "pending_restart": false, - "role": "primary", - "version": "18.1" - }, - "spock": { - "read_only": "off", - "subscriptions": [ + "container_id": "a1b2c3d4e5f6", + "health_check": { + "checked_at": "2025-01-28T10:00:00Z", + "message": "Connection refused", + "status": "healthy" + }, + "image_version": "1.0.0", + "last_health_at": "2025-01-28T10:00:00Z", + "ports": [ { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" + "container_port": 8080, + "host_port": 8080, + "name": "web-client" }, { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" + "container_port": 8080, + "host_port": 8080, + "name": "web-client" }, { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" + "container_port": 8080, + "host_port": 8080, + "name": "web-client" } ], - "version": "4.10.0" + "service_ready": true }, - "state": "degraded", - "status_updated_at": "1990-07-23T01:22:30Z", - "updated_at": "2013-01-29T23:51:44Z" - } - ] - }, - "service_instances": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ServiceInstance" - }, - "description": "Service instances running alongside this database.", - "example": [ + "updated_at": "2025-01-28T10:05:00Z" + }, { "created_at": "2025-01-28T10:00:00Z", "database_id": "production", @@ -7150,7 +7075,7 @@ "state": { "type": "string", "description": "Current state of the database.", - "example": "creating", + "example": "degraded", "enum": [ "creating", "modifying", @@ -7451,51 +7376,6 @@ "status_updated_at": "1993-04-25T23:06:28Z", "updated_at": "1981-08-22T23:20:01Z" }, - { - "connection_info": { - "addresses": [ - "10.24.34.2", - "i-0123456789abcdef.ec2.internal" - ], - "port": 5432 - }, - "created_at": "2011-03-15T17:48:48Z", - "error": "failed to get patroni status: connection refused", - "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", - "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", - "node_name": "n1", - "postgres": { - "patroni_paused": false, - "patroni_state": "unknown", - "pending_restart": true, - "role": "primary", - "version": "18.1" - }, - "spock": { - "read_only": "off", - "subscriptions": [ - { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" - }, - { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" - }, - { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" - } - ], - "version": "4.10.0" - }, - "state": "available", - "status_updated_at": "1993-04-25T23:06:28Z", - "updated_at": "1981-08-22T23:20:01Z" - }, { "connection_info": { "addresses": [ @@ -7652,7 +7532,7 @@ "state": { "type": "string", "description": "Current state of the database.", - "example": "unknown", + "example": "creating", "enum": [ "creating", "modifying", @@ -7863,96 +7743,6 @@ }, "description": "All of the instances in the database.", "example": [ - { - "connection_info": { - "addresses": [ - "10.24.34.2", - "i-0123456789abcdef.ec2.internal" - ], - "port": 5432 - }, - "created_at": "2011-03-15T17:48:48Z", - "error": "failed to get patroni status: connection refused", - "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", - "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", - "node_name": "n1", - "postgres": { - "patroni_paused": false, - "patroni_state": "unknown", - "pending_restart": true, - "role": "primary", - "version": "18.1" - }, - "spock": { - "read_only": "off", - "subscriptions": [ - { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" - }, - { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" - }, - { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" - } - ], - "version": "4.10.0" - }, - "state": "available", - "status_updated_at": "1993-04-25T23:06:28Z", - "updated_at": "1981-08-22T23:20:01Z" - }, - { - "connection_info": { - "addresses": [ - "10.24.34.2", - "i-0123456789abcdef.ec2.internal" - ], - "port": 5432 - }, - "created_at": "2011-03-15T17:48:48Z", - "error": "failed to get patroni status: connection refused", - "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", - "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", - "node_name": "n1", - "postgres": { - "patroni_paused": false, - "patroni_state": "unknown", - "pending_restart": true, - "role": "primary", - "version": "18.1" - }, - "spock": { - "read_only": "off", - "subscriptions": [ - { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" - }, - { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" - }, - { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" - } - ], - "version": "4.10.0" - }, - "state": "available", - "status_updated_at": "1993-04-25T23:06:28Z", - "updated_at": "1981-08-22T23:20:01Z" - }, { "connection_info": { "addresses": [ @@ -8146,53 +7936,6 @@ }, "updated_at": "2025-01-28T10:05:00Z" }, - { - "created_at": "2025-01-28T10:00:00Z", - "database_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "error": "failed to start container: image not found", - "host_id": "host-1", - "service_id": "mcp-server", - "service_instance_id": "mcp-server-host-1", - "state": "running", - "status": { - "addresses": [ - "10.24.34.2", - "i-0123456789abcdef.ec2.internal" - ], - "container_id": "a1b2c3d4e5f6", - "health_check": { - "checked_at": "2025-01-28T10:00:00Z", - "message": "Connection refused", - "status": "healthy" - }, - "image_version": "1.0.0", - "last_health_at": "2025-01-28T10:00:00Z", - "ports": [ - { - "container_port": 8080, - "host_port": 8080, - "name": "web-client" - }, - { - "container_port": 8080, - "host_port": 8080, - "name": "web-client" - }, - { - "container_port": 8080, - "host_port": 8080, - "name": "web-client" - }, - { - "container_port": 8080, - "host_port": 8080, - "name": "web-client" - } - ], - "service_ready": true - }, - "updated_at": "2025-01-28T10:05:00Z" - }, { "created_at": "2025-01-28T10:00:00Z", "database_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", @@ -8549,51 +8292,6 @@ "status_updated_at": "1993-04-25T23:06:28Z", "updated_at": "1981-08-22T23:20:01Z" }, - { - "connection_info": { - "addresses": [ - "10.24.34.2", - "i-0123456789abcdef.ec2.internal" - ], - "port": 5432 - }, - "created_at": "2011-03-15T17:48:48Z", - "error": "failed to get patroni status: connection refused", - "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", - "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", - "node_name": "n1", - "postgres": { - "patroni_paused": false, - "patroni_state": "unknown", - "pending_restart": true, - "role": "primary", - "version": "18.1" - }, - "spock": { - "read_only": "off", - "subscriptions": [ - { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" - }, - { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" - }, - { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" - } - ], - "version": "4.10.0" - }, - "state": "available", - "status_updated_at": "1993-04-25T23:06:28Z", - "updated_at": "1981-08-22T23:20:01Z" - }, { "connection_info": { "addresses": [ @@ -8741,163 +8439,69 @@ "service_ready": true }, "updated_at": "2025-01-28T10:05:00Z" + } + ] + }, + "spec": { + "$ref": "#/components/schemas/DatabaseSpec6" + }, + "state": { + "type": "string", + "description": "Current state of the database.", + "example": "available", + "enum": [ + "creating", + "modifying", + "available", + "deleting", + "degraded", + "failed", + "restoring", + "unknown" + ] + }, + "tenant_id": { + "type": "string", + "description": "Unique identifier for the database's owner.", + "example": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "minLength": 1, + "maxLength": 36 + }, + "updated_at": { + "type": "string", + "description": "The time that the database was last updated.", + "example": "2025-01-01T02:30:00Z", + "format": "date-time" + } + }, + "example": { + "created_at": "2025-06-18T16:52:05Z", + "id": "storefront", + "instances": [ + { + "connection_info": { + "addresses": [ + "10.24.34.2", + "i-0123456789abcdef.ec2.internal" + ], + "port": 5432 }, - { - "created_at": "2025-01-28T10:00:00Z", - "database_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "error": "failed to start container: image not found", - "host_id": "host-1", - "service_id": "mcp-server", - "service_instance_id": "mcp-server-host-1", - "state": "running", - "status": { - "addresses": [ - "10.24.34.2", - "i-0123456789abcdef.ec2.internal" - ], - "container_id": "a1b2c3d4e5f6", - "health_check": { - "checked_at": "2025-01-28T10:00:00Z", - "message": "Connection refused", - "status": "healthy" - }, - "image_version": "1.0.0", - "last_health_at": "2025-01-28T10:00:00Z", - "ports": [ - { - "container_port": 8080, - "host_port": 8080, - "name": "web-client" - }, - { - "container_port": 8080, - "host_port": 8080, - "name": "web-client" - }, - { - "container_port": 8080, - "host_port": 8080, - "name": "web-client" - }, - { - "container_port": 8080, - "host_port": 8080, - "name": "web-client" - } - ], - "service_ready": true - }, - "updated_at": "2025-01-28T10:05:00Z" - }, - { - "created_at": "2025-01-28T10:00:00Z", - "database_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "error": "failed to start container: image not found", - "host_id": "host-1", - "service_id": "mcp-server", - "service_instance_id": "mcp-server-host-1", - "state": "running", - "status": { - "addresses": [ - "10.24.34.2", - "i-0123456789abcdef.ec2.internal" - ], - "container_id": "a1b2c3d4e5f6", - "health_check": { - "checked_at": "2025-01-28T10:00:00Z", - "message": "Connection refused", - "status": "healthy" - }, - "image_version": "1.0.0", - "last_health_at": "2025-01-28T10:00:00Z", - "ports": [ - { - "container_port": 8080, - "host_port": 8080, - "name": "web-client" - }, - { - "container_port": 8080, - "host_port": 8080, - "name": "web-client" - }, - { - "container_port": 8080, - "host_port": 8080, - "name": "web-client" - }, - { - "container_port": 8080, - "host_port": 8080, - "name": "web-client" - } - ], - "service_ready": true - }, - "updated_at": "2025-01-28T10:05:00Z" - } - ] - }, - "spec": { - "$ref": "#/components/schemas/DatabaseSpec6" - }, - "state": { - "type": "string", - "description": "Current state of the database.", - "example": "modifying", - "enum": [ - "creating", - "modifying", - "available", - "deleting", - "degraded", - "failed", - "restoring", - "unknown" - ] - }, - "tenant_id": { - "type": "string", - "description": "Unique identifier for the database's owner.", - "example": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "minLength": 1, - "maxLength": 36 - }, - "updated_at": { - "type": "string", - "description": "The time that the database was last updated.", - "example": "2025-01-01T02:30:00Z", - "format": "date-time" - } - }, - "example": { - "created_at": "2025-06-18T16:52:05Z", - "id": "storefront", - "instances": [ - { - "connection_info": { - "addresses": [ - "10.24.34.2", - "i-0123456789abcdef.ec2.internal" - ], - "port": 5432 - }, - "created_at": "2025-06-18T16:52:22Z", - "host_id": "us-east-1", - "id": "storefront-n1-689qacsi", - "node_name": "n1", - "postgres": { - "patroni_state": "running", - "role": "primary", - "version": "18.1" - }, - "spock": { - "read_only": "off", - "subscriptions": [ - { - "name": "sub_n1n3", - "provider_node": "n3", - "status": "replicating" + "created_at": "2025-06-18T16:52:22Z", + "host_id": "us-east-1", + "id": "storefront-n1-689qacsi", + "node_name": "n1", + "postgres": { + "patroni_state": "running", + "role": "primary", + "version": "18.1" + }, + "spock": { + "read_only": "off", + "subscriptions": [ + { + "name": "sub_n1n3", + "provider_node": "n3", + "status": "replicating" }, { "name": "sub_n1n2", @@ -9100,6 +8704,51 @@ "status_updated_at": "1993-04-25T23:06:28Z", "updated_at": "1981-08-22T23:20:01Z" }, + { + "connection_info": { + "addresses": [ + "10.24.34.2", + "i-0123456789abcdef.ec2.internal" + ], + "port": 5432 + }, + "created_at": "2011-03-15T17:48:48Z", + "error": "failed to get patroni status: connection refused", + "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", + "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", + "node_name": "n1", + "postgres": { + "patroni_paused": false, + "patroni_state": "unknown", + "pending_restart": true, + "role": "primary", + "version": "18.1" + }, + "spock": { + "read_only": "off", + "subscriptions": [ + { + "name": "sub_n1n2", + "provider_node": "n2", + "status": "down" + }, + { + "name": "sub_n1n2", + "provider_node": "n2", + "status": "down" + }, + { + "name": "sub_n1n2", + "provider_node": "n2", + "status": "down" + } + ], + "version": "4.10.0" + }, + "state": "available", + "status_updated_at": "1993-04-25T23:06:28Z", + "updated_at": "1981-08-22T23:20:01Z" + }, { "connection_info": { "addresses": [ @@ -9303,7 +8952,7 @@ "state": { "type": "string", "description": "Current state of the database.", - "example": "failed", + "example": "deleting", "enum": [ "creating", "modifying", @@ -9498,7 +9147,7 @@ "type": "array", "items": { "type": "string", - "example": "Eius at." + "example": "Qui ut et." }, "description": "Optional ordered list of database node names. When set, the service's database connection includes only the listed nodes in the specified order.", "example": [ @@ -9584,7 +9233,7 @@ "type": "array", "items": { "type": "string", - "example": "Modi explicabo." + "example": "Non quae." }, "description": "Additional pg_hba.conf entries for this particular node, one rule per array element. Prepended to the database-level pg_hba_conf entries, so node entries take first-match priority. Entries are inserted between control-plane's system-user rules and its catch-all, and cannot affect control-plane-internal connectivity.", "example": [ @@ -9595,7 +9244,7 @@ "type": "array", "items": { "type": "string", - "example": "Alias qui et eius." + "example": "Ea omnis ut dolor dolorem impedit laudantium." }, "description": "Additional pg_ident.conf entries for this particular node, one mapping per array element. Prepended to the database-level pg_ident_conf entries.", "example": [ @@ -9760,7 +9409,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Animi recusandae." } }, "patroni_port": 8888, @@ -9834,8 +9484,6 @@ }, "description": "The IDs of the hosts that should run this node. When multiple hosts are specified, one host will chosen as a primary, and the others will be read replicas.", "example": [ - "76f9b8c0-4958-11f0-a489-3bb29577c696", - "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], "minItems": 1 @@ -9867,7 +9515,7 @@ "type": "array", "items": { "type": "string", - "example": "Ut quae eos." + "example": "Excepturi sapiente neque doloribus consequatur voluptatibus." }, "description": "Additional pg_hba.conf entries for this particular node, one rule per array element. Prepended to the database-level pg_hba_conf entries, so node entries take first-match priority. Entries are inserted between control-plane's system-user rules and its catch-all, and cannot affect control-plane-internal connectivity.", "example": [ @@ -9878,7 +9526,7 @@ "type": "array", "items": { "type": "string", - "example": "Voluptates quo." + "example": "Et nisi nihil corporis." }, "description": "Additional pg_ident.conf entries for this particular node, one mapping per array element. Prepended to the database-level pg_ident_conf entries.", "example": [ @@ -9942,29 +9590,6 @@ "s3_region": "us-east-1", "type": "s3" }, - { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", - "storage-upload-chunk-size": "5MiB" - }, - "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "gcs_endpoint": "localhost", - "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", - "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "retention_full": 2, - "retention_full_type": "count", - "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "s3_endpoint": "s3.us-east-1.amazonaws.com", - "s3_key": "AKIAIOSFODNN7EXAMPLE", - "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "s3_region": "us-east-1", - "type": "s3" - }, { "azure_account": "pgedge-backups", "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", @@ -10064,7 +9689,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Necessitatibus excepturi reprehenderit." } }, "patroni_port": 8888, @@ -10138,6 +9764,7 @@ }, "description": "The IDs of the hosts that should run this node. When multiple hosts are specified, one host will chosen as a primary, and the others will be read replicas.", "example": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], "minItems": 1 @@ -10169,7 +9796,7 @@ "type": "array", "items": { "type": "string", - "example": "Distinctio atque." + "example": "Velit distinctio sed amet." }, "description": "Additional pg_hba.conf entries for this particular node, one rule per array element. Prepended to the database-level pg_hba_conf entries, so node entries take first-match priority. Entries are inserted between control-plane's system-user rules and its catch-all, and cannot affect control-plane-internal connectivity.", "example": [ @@ -10180,7 +9807,7 @@ "type": "array", "items": { "type": "string", - "example": "Autem doloremque et excepturi." + "example": "Voluptas qui." }, "description": "Additional pg_ident.conf entries for this particular node, one mapping per array element. Prepended to the database-level pg_ident_conf entries.", "example": [ @@ -10368,7 +9995,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "patroni_port": 8888, @@ -10442,6 +10070,7 @@ }, "description": "The IDs of the hosts that should run this node. When multiple hosts are specified, one host will chosen as a primary, and the others will be read replicas.", "example": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], "minItems": 1 @@ -10473,7 +10102,7 @@ "type": "array", "items": { "type": "string", - "example": "Est temporibus molestias officiis sint." + "example": "Numquam incidunt eaque totam at culpa ut." }, "description": "Additional pg_hba.conf entries for this particular node, one rule per array element. Prepended to the database-level pg_hba_conf entries, so node entries take first-match priority. Entries are inserted between control-plane's system-user rules and its catch-all, and cannot affect control-plane-internal connectivity.", "example": [ @@ -10484,7 +10113,7 @@ "type": "array", "items": { "type": "string", - "example": "Ad aut velit distinctio sed." + "example": "Iste dignissimos exercitationem." }, "description": "Additional pg_ident.conf entries for this particular node, one mapping per array element. Prepended to the database-level pg_ident_conf entries.", "example": [ @@ -10615,6 +10244,8 @@ }, "cpus": "500m", "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], "memory": "500M", @@ -10670,7 +10301,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "patroni_port": 8888, @@ -10744,6 +10376,7 @@ }, "description": "The IDs of the hosts that should run this node. When multiple hosts are specified, one host will chosen as a primary, and the others will be read replicas.", "example": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], "minItems": 1 @@ -10775,7 +10408,7 @@ "type": "array", "items": { "type": "string", - "example": "Quaerat rem." + "example": "Consequuntur et." }, "description": "Additional pg_hba.conf entries for this particular node, one rule per array element. Prepended to the database-level pg_hba_conf entries, so node entries take first-match priority. Entries are inserted between control-plane's system-user rules and its catch-all, and cannot affect control-plane-internal connectivity.", "example": [ @@ -10786,7 +10419,7 @@ "type": "array", "items": { "type": "string", - "example": "Qui numquam incidunt eaque totam at." + "example": "Et nulla omnis nobis dolor sit." }, "description": "Additional pg_ident.conf entries for this particular node, one mapping per array element. Prepended to the database-level pg_ident_conf entries.", "example": [ @@ -10850,29 +10483,6 @@ "s3_region": "us-east-1", "type": "s3" }, - { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", - "storage-upload-chunk-size": "5MiB" - }, - "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "gcs_endpoint": "localhost", - "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", - "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "retention_full": 2, - "retention_full_type": "count", - "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "s3_endpoint": "s3.us-east-1.amazonaws.com", - "s3_key": "AKIAIOSFODNN7EXAMPLE", - "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "s3_region": "us-east-1", - "type": "s3" - }, { "azure_account": "pgedge-backups", "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", @@ -10917,8 +10527,6 @@ }, "cpus": "500m", "host_ids": [ - "76f9b8c0-4958-11f0-a489-3bb29577c696", - "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], "memory": "500M", @@ -10974,7 +10582,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Quia reiciendis et odio omnis itaque cum." } }, "patroni_port": 8888, @@ -11048,8 +10657,6 @@ }, "description": "The IDs of the hosts that should run this node. When multiple hosts are specified, one host will chosen as a primary, and the others will be read replicas.", "example": [ - "76f9b8c0-4958-11f0-a489-3bb29577c696", - "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], "minItems": 1 @@ -11081,7 +10688,7 @@ "type": "array", "items": { "type": "string", - "example": "Occaecati et et consequuntur." + "example": "Deserunt quis." }, "description": "Additional pg_hba.conf entries for this particular node, one rule per array element. Prepended to the database-level pg_hba_conf entries, so node entries take first-match priority. Entries are inserted between control-plane's system-user rules and its catch-all, and cannot affect control-plane-internal connectivity.", "example": [ @@ -11092,7 +10699,7 @@ "type": "array", "items": { "type": "string", - "example": "Qui et nulla omnis nobis dolor." + "example": "Officiis libero." }, "description": "Additional pg_ident.conf entries for this particular node, one mapping per array element. Prepended to the database-level pg_ident_conf entries.", "example": [ @@ -11278,7 +10885,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "patroni_port": 8888, @@ -11352,6 +10960,8 @@ }, "description": "The IDs of the hosts that should run this node. When multiple hosts are specified, one host will chosen as a primary, and the others will be read replicas.", "example": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], "minItems": 1 @@ -11383,7 +10993,7 @@ "type": "array", "items": { "type": "string", - "example": "Ducimus deserunt quis commodi officiis libero mollitia." + "example": "Aperiam rerum at eveniet consectetur facilis autem." }, "description": "Additional pg_hba.conf entries for this particular node, one rule per array element. Prepended to the database-level pg_hba_conf entries, so node entries take first-match priority. Entries are inserted between control-plane's system-user rules and its catch-all, and cannot affect control-plane-internal connectivity.", "example": [ @@ -11394,7 +11004,7 @@ "type": "array", "items": { "type": "string", - "example": "Impedit ab." + "example": "Voluptatem velit dolorem." }, "description": "Additional pg_ident.conf entries for this particular node, one mapping per array element. Prepended to the database-level pg_ident_conf entries.", "example": [ @@ -11525,6 +11135,8 @@ }, "cpus": "500m", "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], "memory": "500M", @@ -11580,7 +11192,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "patroni_port": 8888, @@ -11804,6 +11417,8 @@ }, "cpus": "500m", "host_ids": [ + "de3b1388-1f0c-42f1-a86c-59ab72f255ec", + "de3b1388-1f0c-42f1-a86c-59ab72f255ec", "de3b1388-1f0c-42f1-a86c-59ab72f255ec" ], "memory": "500M", @@ -11859,7 +11474,183 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Animi recusandae." + } + }, + "patroni_port": 8888, + "pg_hba_conf": [ + "host example myapp_user 10.0.0.0/8 scram-sha-256" + ], + "pg_ident_conf": [ + "ssl_users CN=alice,O=example alice" + ], + "port": 5432, + "postgres_version": "17.6", + "postgresql_conf": { + "max_connections": 1000 + }, + "restore_config": { + "repository": { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "f6b84a99-5e91-4203-be1e-131fe82e5984", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + }, + "restore_options": { + "set": "20250505-153628F", + "target": "123456", + "type": "xid" + }, + "source_database_id": "02f1a7db-fca8-4521-b57a-2a375c1ced51", + "source_database_name": "northwind", + "source_node_name": "n1" + }, + "source_node": "n1" + }, + { + "backup_config": { + "repositories": [ + { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", + "storage-upload-chunk-size": "5MiB" + }, + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "f6b84a99-5e91-4203-be1e-131fe82e5984", + "retention_full": 2, + "retention_full_type": "count", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + }, + { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", + "storage-upload-chunk-size": "5MiB" + }, + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "f6b84a99-5e91-4203-be1e-131fe82e5984", + "retention_full": 2, + "retention_full_type": "count", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + } + ], + "schedules": [ + { + "cron_expression": "0 6 * * ?", + "id": "daily-full-backup", + "type": "full" + }, + { + "cron_expression": "0 6 * * ?", + "id": "daily-full-backup", + "type": "full" + }, + { + "cron_expression": "0 6 * * ?", + "id": "daily-full-backup", + "type": "full" + } + ] + }, + "cpus": "500m", + "host_ids": [ + "de3b1388-1f0c-42f1-a86c-59ab72f255ec", + "de3b1388-1f0c-42f1-a86c-59ab72f255ec", + "de3b1388-1f0c-42f1-a86c-59ab72f255ec" + ], + "memory": "500M", + "name": "n1", + "orchestrator_opts": { + "swarm": { + "extra_labels": { + "traefik.enable": "true", + "traefik.tcp.routers.mydb.rule": "HostSNI(`mydb.example.com`)" + }, + "extra_networks": [ + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + }, + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + }, + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + } + ], + "extra_volumes": [ + { + "destination_path": "/backups/container", + "host_path": "/Users/user/backups/host" + }, + { + "destination_path": "/backups/container", + "host_path": "/Users/user/backups/host" + }, + { + "destination_path": "/backups/container", + "host_path": "/Users/user/backups/host" + } + ], + "image": "Animi recusandae." } }, "patroni_port": 8888, @@ -11925,7 +11716,7 @@ "type": "array", "items": { "type": "string", - "example": "Reprehenderit harum sapiente qui ullam qui." + "example": "Velit et labore in dolor quisquam placeat." }, "description": "Additional pg_hba.conf entries, one rule per array element. Inserted between control-plane's system-user rules and its catch-all, so they cannot affect control-plane-internal connectivity (Patroni, replication, health checks). Node-level pg_hba_conf entries are prepended to these.", "example": [ @@ -11937,7 +11728,7 @@ "type": "array", "items": { "type": "string", - "example": "Sint iure eum ducimus quia deserunt animi." + "example": "Eos molestiae voluptates laborum." }, "description": "Additional pg_ident.conf entries, one mapping per array element. Purely additive; control-plane writes no pg_ident entries of its own. The primary use case is cert auth with map= translating certificate CNs to PostgreSQL usernames.", "example": [ @@ -11996,7 +11787,6 @@ "target_session_attrs": "primary" }, "host_ids": [ - "de3b1388-1f0c-42f1-a86c-59ab72f255ec", "de3b1388-1f0c-42f1-a86c-59ab72f255ec" ], "memory": "512M", @@ -12051,7 +11841,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Animi recusandae." } }, "port": 0, @@ -12075,7 +11866,6 @@ "target_session_attrs": "primary" }, "host_ids": [ - "de3b1388-1f0c-42f1-a86c-59ab72f255ec", "de3b1388-1f0c-42f1-a86c-59ab72f255ec" ], "memory": "512M", @@ -12130,82 +11920,162 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Animi recusandae." } }, "port": 0, "service_id": "analytics-service", "service_type": "rag", "version": "latest" - } - ] - }, - "spock_version": { - "type": "string", - "description": "The major version of the Spock extension.", - "example": "5", - "pattern": "^\\d{1}$" - } - }, - "example": { - "backup_config": { - "repositories": [ - { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", - "storage-upload-chunk-size": "5MiB" - }, - "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "gcs_endpoint": "localhost", - "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", - "id": "f6b84a99-5e91-4203-be1e-131fe82e5984", - "retention_full": 2, - "retention_full_type": "count", - "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "s3_endpoint": "s3.us-east-1.amazonaws.com", - "s3_key": "AKIAIOSFODNN7EXAMPLE", - "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "s3_region": "us-east-1", - "type": "s3" }, { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", - "storage-upload-chunk-size": "5MiB" + "config": { + "llm_model": "gpt-4", + "llm_provider": "openai", + "openai_api_key": "sk-..." }, - "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "gcs_endpoint": "localhost", - "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", - "id": "f6b84a99-5e91-4203-be1e-131fe82e5984", - "retention_full": 2, - "retention_full_type": "count", - "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "s3_endpoint": "s3.us-east-1.amazonaws.com", - "s3_key": "AKIAIOSFODNN7EXAMPLE", - "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "s3_region": "us-east-1", - "type": "s3" - } - ], - "schedules": [ - { - "cron_expression": "0 6 * * ?", - "id": "daily-full-backup", - "type": "full" - }, - { - "cron_expression": "0 6 * * ?", - "id": "daily-full-backup", + "connect_as": "app", + "cpus": "500m", + "database_connection": { + "target_nodes": [ + "n1", + "n2" + ], + "target_session_attrs": "primary" + }, + "host_ids": [ + "de3b1388-1f0c-42f1-a86c-59ab72f255ec" + ], + "memory": "512M", + "orchestrator_opts": { + "swarm": { + "extra_labels": { + "traefik.enable": "true", + "traefik.tcp.routers.mydb.rule": "HostSNI(`mydb.example.com`)" + }, + "extra_networks": [ + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + }, + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + }, + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + } + ], + "extra_volumes": [ + { + "destination_path": "/backups/container", + "host_path": "/Users/user/backups/host" + }, + { + "destination_path": "/backups/container", + "host_path": "/Users/user/backups/host" + }, + { + "destination_path": "/backups/container", + "host_path": "/Users/user/backups/host" + } + ], + "image": "Animi recusandae." + } + }, + "port": 0, + "service_id": "analytics-service", + "service_type": "rag", + "version": "latest" + } + ] + }, + "spock_version": { + "type": "string", + "description": "The major version of the Spock extension.", + "example": "5", + "pattern": "^\\d{1}$" + } + }, + "example": { + "backup_config": { + "repositories": [ + { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", + "storage-upload-chunk-size": "5MiB" + }, + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "f6b84a99-5e91-4203-be1e-131fe82e5984", + "retention_full": 2, + "retention_full_type": "count", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + }, + { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", + "storage-upload-chunk-size": "5MiB" + }, + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "f6b84a99-5e91-4203-be1e-131fe82e5984", + "retention_full": 2, + "retention_full_type": "count", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + } + ], + "schedules": [ + { + "cron_expression": "0 6 * * ?", + "id": "daily-full-backup", + "type": "full" + }, + { + "cron_expression": "0 6 * * ?", + "id": "daily-full-backup", "type": "full" }, { @@ -12330,6 +12200,8 @@ }, "cpus": "500m", "host_ids": [ + "de3b1388-1f0c-42f1-a86c-59ab72f255ec", + "de3b1388-1f0c-42f1-a86c-59ab72f255ec", "de3b1388-1f0c-42f1-a86c-59ab72f255ec" ], "memory": "500M", @@ -12385,7 +12257,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Animi recusandae." } }, "patroni_port": 8888, @@ -12502,6 +12375,8 @@ }, "cpus": "500m", "host_ids": [ + "de3b1388-1f0c-42f1-a86c-59ab72f255ec", + "de3b1388-1f0c-42f1-a86c-59ab72f255ec", "de3b1388-1f0c-42f1-a86c-59ab72f255ec" ], "memory": "500M", @@ -12557,7 +12432,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Animi recusandae." } }, "patroni_port": 8888, @@ -12603,217 +12479,45 @@ "source_node_name": "n1" }, "source_node": "n1" - }, - { - "backup_config": { - "repositories": [ - { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", - "storage-upload-chunk-size": "5MiB" - }, - "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "gcs_endpoint": "localhost", - "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", - "id": "f6b84a99-5e91-4203-be1e-131fe82e5984", - "retention_full": 2, - "retention_full_type": "count", - "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "s3_endpoint": "s3.us-east-1.amazonaws.com", - "s3_key": "AKIAIOSFODNN7EXAMPLE", - "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "s3_region": "us-east-1", - "type": "s3" + } + ], + "orchestrator_opts": { + "swarm": { + "extra_labels": { + "traefik.enable": "true", + "traefik.tcp.routers.mydb.rule": "HostSNI(`mydb.example.com`)" + }, + "extra_networks": [ + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" }, - { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", - "storage-upload-chunk-size": "5MiB" - }, - "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "gcs_endpoint": "localhost", - "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", - "id": "f6b84a99-5e91-4203-be1e-131fe82e5984", - "retention_full": 2, - "retention_full_type": "count", - "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "s3_endpoint": "s3.us-east-1.amazonaws.com", - "s3_key": "AKIAIOSFODNN7EXAMPLE", - "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "s3_region": "us-east-1", - "type": "s3" - } - ], - "schedules": [ - { - "cron_expression": "0 6 * * ?", - "id": "daily-full-backup", - "type": "full" + "id": "traefik-public" + }, + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" }, - { - "cron_expression": "0 6 * * ?", - "id": "daily-full-backup", - "type": "full" + "id": "traefik-public" + }, + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" }, - { - "cron_expression": "0 6 * * ?", - "id": "daily-full-backup", - "type": "full" - } - ] - }, - "cpus": "500m", - "host_ids": [ - "de3b1388-1f0c-42f1-a86c-59ab72f255ec" - ], - "memory": "500M", - "name": "n1", - "orchestrator_opts": { - "swarm": { - "extra_labels": { - "traefik.enable": "true", - "traefik.tcp.routers.mydb.rule": "HostSNI(`mydb.example.com`)" - }, - "extra_networks": [ - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" - }, - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" - }, - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" - } - ], - "extra_volumes": [ - { - "destination_path": "/backups/container", - "host_path": "/Users/user/backups/host" - }, - { - "destination_path": "/backups/container", - "host_path": "/Users/user/backups/host" - }, - { - "destination_path": "/backups/container", - "host_path": "/Users/user/backups/host" - } - ] - } - }, - "patroni_port": 8888, - "pg_hba_conf": [ - "host example myapp_user 10.0.0.0/8 scram-sha-256" - ], - "pg_ident_conf": [ - "ssl_users CN=alice,O=example alice" - ], - "port": 5432, - "postgres_version": "17.6", - "postgresql_conf": { - "max_connections": 1000 - }, - "restore_config": { - "repository": { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab" - }, - "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "gcs_endpoint": "localhost", - "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", - "id": "f6b84a99-5e91-4203-be1e-131fe82e5984", - "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "s3_endpoint": "s3.us-east-1.amazonaws.com", - "s3_key": "AKIAIOSFODNN7EXAMPLE", - "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "s3_region": "us-east-1", - "type": "s3" - }, - "restore_options": { - "set": "20250505-153628F", - "target": "123456", - "type": "xid" - }, - "source_database_id": "02f1a7db-fca8-4521-b57a-2a375c1ced51", - "source_database_name": "northwind", - "source_node_name": "n1" - }, - "source_node": "n1" - } - ], - "orchestrator_opts": { - "swarm": { - "extra_labels": { - "traefik.enable": "true", - "traefik.tcp.routers.mydb.rule": "HostSNI(`mydb.example.com`)" - }, - "extra_networks": [ - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" - }, - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" - }, - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" - } + "id": "traefik-public" + } ], "extra_volumes": [ { @@ -12828,7 +12532,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Animi recusandae." } }, "patroni_port": 8888, @@ -12901,7 +12606,6 @@ "target_session_attrs": "primary" }, "host_ids": [ - "de3b1388-1f0c-42f1-a86c-59ab72f255ec", "de3b1388-1f0c-42f1-a86c-59ab72f255ec" ], "memory": "512M", @@ -12956,7 +12660,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Animi recusandae." } }, "port": 0, @@ -12980,7 +12685,6 @@ "target_session_attrs": "primary" }, "host_ids": [ - "de3b1388-1f0c-42f1-a86c-59ab72f255ec", "de3b1388-1f0c-42f1-a86c-59ab72f255ec" ], "memory": "512M", @@ -13035,7 +12739,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Animi recusandae." } }, "port": 0, @@ -13059,7 +12764,6 @@ "target_session_attrs": "primary" }, "host_ids": [ - "de3b1388-1f0c-42f1-a86c-59ab72f255ec", "de3b1388-1f0c-42f1-a86c-59ab72f255ec" ], "memory": "512M", @@ -13114,7 +12818,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Animi recusandae." } }, "port": 0, @@ -13138,7 +12843,6 @@ "target_session_attrs": "primary" }, "host_ids": [ - "de3b1388-1f0c-42f1-a86c-59ab72f255ec", "de3b1388-1f0c-42f1-a86c-59ab72f255ec" ], "memory": "512M", @@ -13193,7 +12897,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Animi recusandae." } }, "port": 0, @@ -13316,29 +13021,6 @@ "s3_region": "us-east-1", "type": "s3" }, - { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", - "storage-upload-chunk-size": "5MiB" - }, - "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "gcs_endpoint": "localhost", - "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", - "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "retention_full": 2, - "retention_full_type": "count", - "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "s3_endpoint": "s3.us-east-1.amazonaws.com", - "s3_key": "AKIAIOSFODNN7EXAMPLE", - "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "s3_region": "us-east-1", - "type": "s3" - }, { "azure_account": "pgedge-backups", "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", @@ -13383,8 +13065,6 @@ }, "cpus": "500m", "host_ids": [ - "76f9b8c0-4958-11f0-a489-3bb29577c696", - "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], "memory": "500M", @@ -13440,7 +13120,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Necessitatibus excepturi reprehenderit." } }, "patroni_port": 8888, @@ -13513,29 +13194,6 @@ "s3_region": "us-east-1", "type": "s3" }, - { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", - "storage-upload-chunk-size": "5MiB" - }, - "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "gcs_endpoint": "localhost", - "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", - "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "retention_full": 2, - "retention_full_type": "count", - "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "s3_endpoint": "s3.us-east-1.amazonaws.com", - "s3_key": "AKIAIOSFODNN7EXAMPLE", - "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "s3_region": "us-east-1", - "type": "s3" - }, { "azure_account": "pgedge-backups", "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", @@ -13580,8 +13238,6 @@ }, "cpus": "500m", "host_ids": [ - "76f9b8c0-4958-11f0-a489-3bb29577c696", - "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], "memory": "500M", @@ -13637,204 +13293,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] - } - }, - "patroni_port": 8888, - "pg_hba_conf": [ - "host example myapp_user 10.0.0.0/8 scram-sha-256" - ], - "pg_ident_conf": [ - "ssl_users CN=alice,O=example alice" - ], - "port": 5432, - "postgres_version": "17.6", - "postgresql_conf": { - "max_connections": 1000 - }, - "restore_config": { - "repository": { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab" - }, - "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "gcs_endpoint": "localhost", - "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", - "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "s3_endpoint": "s3.us-east-1.amazonaws.com", - "s3_key": "AKIAIOSFODNN7EXAMPLE", - "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "s3_region": "us-east-1", - "type": "s3" - }, - "restore_options": { - "set": "20250505-153628F", - "target": "123456", - "type": "xid" - }, - "source_database_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "source_database_name": "northwind", - "source_node_name": "n1" - }, - "source_node": "n1" - }, - { - "backup_config": { - "repositories": [ - { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", - "storage-upload-chunk-size": "5MiB" - }, - "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "gcs_endpoint": "localhost", - "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", - "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "retention_full": 2, - "retention_full_type": "count", - "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "s3_endpoint": "s3.us-east-1.amazonaws.com", - "s3_key": "AKIAIOSFODNN7EXAMPLE", - "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "s3_region": "us-east-1", - "type": "s3" - }, - { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", - "storage-upload-chunk-size": "5MiB" - }, - "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "gcs_endpoint": "localhost", - "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", - "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "retention_full": 2, - "retention_full_type": "count", - "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "s3_endpoint": "s3.us-east-1.amazonaws.com", - "s3_key": "AKIAIOSFODNN7EXAMPLE", - "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "s3_region": "us-east-1", - "type": "s3" - }, - { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", - "storage-upload-chunk-size": "5MiB" - }, - "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "gcs_endpoint": "localhost", - "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", - "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "retention_full": 2, - "retention_full_type": "count", - "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "s3_endpoint": "s3.us-east-1.amazonaws.com", - "s3_key": "AKIAIOSFODNN7EXAMPLE", - "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "s3_region": "us-east-1", - "type": "s3" - } - ], - "schedules": [ - { - "cron_expression": "0 6 * * ?", - "id": "daily-full-backup", - "type": "full" - }, - { - "cron_expression": "0 6 * * ?", - "id": "daily-full-backup", - "type": "full" - }, - { - "cron_expression": "0 6 * * ?", - "id": "daily-full-backup", - "type": "full" - } - ] - }, - "cpus": "500m", - "host_ids": [ - "76f9b8c0-4958-11f0-a489-3bb29577c696", - "76f9b8c0-4958-11f0-a489-3bb29577c696", - "76f9b8c0-4958-11f0-a489-3bb29577c696" - ], - "memory": "500M", - "name": "n1", - "orchestrator_opts": { - "swarm": { - "extra_labels": { - "traefik.enable": "true", - "traefik.tcp.routers.mydb.rule": "HostSNI(`mydb.example.com`)" - }, - "extra_networks": [ - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" - }, - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" - }, - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" - } - ], - "extra_volumes": [ - { - "destination_path": "/backups/container", - "host_path": "/Users/user/backups/host" - }, - { - "destination_path": "/backups/container", - "host_path": "/Users/user/backups/host" - }, - { - "destination_path": "/backups/container", - "host_path": "/Users/user/backups/host" - } - ] + ], + "image": "Necessitatibus excepturi reprehenderit." } }, "patroni_port": 8888, @@ -13900,7 +13360,7 @@ "type": "array", "items": { "type": "string", - "example": "Est asperiores quis in sunt dignissimos." + "example": "Fuga occaecati optio accusantium eos voluptatibus sunt." }, "description": "Additional pg_hba.conf entries, one rule per array element. Inserted between control-plane's system-user rules and its catch-all, so they cannot affect control-plane-internal connectivity (Patroni, replication, health checks). Node-level pg_hba_conf entries are prepended to these.", "example": [ @@ -13912,7 +13372,7 @@ "type": "array", "items": { "type": "string", - "example": "Cupiditate molestiae." + "example": "Sapiente doloribus." }, "description": "Additional pg_ident.conf entries, one mapping per array element. Purely additive; control-plane writes no pg_ident entries of its own. The primary use case is cert auth with map= translating certificate CNs to PostgreSQL usernames.", "example": [ @@ -14026,86 +13486,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] - } - }, - "port": 0, - "service_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "service_type": "rag", - "version": "latest" - }, - { - "config": { - "llm_model": "gpt-4", - "llm_provider": "openai", - "openai_api_key": "sk-..." - }, - "connect_as": "app", - "cpus": "500m", - "database_connection": { - "target_nodes": [ - "n1", - "n2" - ], - "target_session_attrs": "primary" - }, - "host_ids": [ - "76f9b8c0-4958-11f0-a489-3bb29577c696", - "76f9b8c0-4958-11f0-a489-3bb29577c696" - ], - "memory": "512M", - "orchestrator_opts": { - "swarm": { - "extra_labels": { - "traefik.enable": "true", - "traefik.tcp.routers.mydb.rule": "HostSNI(`mydb.example.com`)" - }, - "extra_networks": [ - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" - }, - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" - }, - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" - } ], - "extra_volumes": [ - { - "destination_path": "/backups/container", - "host_path": "/Users/user/backups/host" - }, - { - "destination_path": "/backups/container", - "host_path": "/Users/user/backups/host" - }, - { - "destination_path": "/backups/container", - "host_path": "/Users/user/backups/host" - } - ] + "image": "Necessitatibus excepturi reprehenderit." } }, "port": 0, @@ -14184,137 +13566,36 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Necessitatibus excepturi reprehenderit." } }, "port": 0, "service_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", "service_type": "rag", "version": "latest" - }, + } + ] + }, + "spock_version": { + "type": "string", + "description": "The major version of the Spock extension.", + "example": "5", + "pattern": "^\\d{1}$" + } + }, + "example": { + "backup_config": { + "repositories": [ { - "config": { - "llm_model": "gpt-4", - "llm_provider": "openai", - "openai_api_key": "sk-..." - }, - "connect_as": "app", - "cpus": "500m", - "database_connection": { - "target_nodes": [ - "n1", - "n2" - ], - "target_session_attrs": "primary" - }, - "host_ids": [ - "76f9b8c0-4958-11f0-a489-3bb29577c696", - "76f9b8c0-4958-11f0-a489-3bb29577c696" - ], - "memory": "512M", - "orchestrator_opts": { - "swarm": { - "extra_labels": { - "traefik.enable": "true", - "traefik.tcp.routers.mydb.rule": "HostSNI(`mydb.example.com`)" - }, - "extra_networks": [ - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" - }, - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" - }, - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" - } - ], - "extra_volumes": [ - { - "destination_path": "/backups/container", - "host_path": "/Users/user/backups/host" - }, - { - "destination_path": "/backups/container", - "host_path": "/Users/user/backups/host" - }, - { - "destination_path": "/backups/container", - "host_path": "/Users/user/backups/host" - } - ] - } - }, - "port": 0, - "service_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "service_type": "rag", - "version": "latest" - } - ] - }, - "spock_version": { - "type": "string", - "description": "The major version of the Spock extension.", - "example": "5", - "pattern": "^\\d{1}$" - } - }, - "example": { - "backup_config": { - "repositories": [ - { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", - "storage-upload-chunk-size": "5MiB" - }, - "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "gcs_endpoint": "localhost", - "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", - "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "retention_full": 2, - "retention_full_type": "count", - "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "s3_endpoint": "s3.us-east-1.amazonaws.com", - "s3_key": "AKIAIOSFODNN7EXAMPLE", - "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "s3_region": "us-east-1", - "type": "s3" - }, - { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", - "storage-upload-chunk-size": "5MiB" + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", + "storage-upload-chunk-size": "5MiB" }, "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", "gcs_endpoint": "localhost", @@ -14442,29 +13723,6 @@ "s3_region": "us-east-1", "type": "s3" }, - { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", - "storage-upload-chunk-size": "5MiB" - }, - "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "gcs_endpoint": "localhost", - "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", - "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "retention_full": 2, - "retention_full_type": "count", - "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "s3_endpoint": "s3.us-east-1.amazonaws.com", - "s3_key": "AKIAIOSFODNN7EXAMPLE", - "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "s3_region": "us-east-1", - "type": "s3" - }, { "azure_account": "pgedge-backups", "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", @@ -14509,8 +13767,6 @@ }, "cpus": "500m", "host_ids": [ - "76f9b8c0-4958-11f0-a489-3bb29577c696", - "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], "memory": "500M", @@ -14566,7 +13822,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Necessitatibus excepturi reprehenderit." } }, "patroni_port": 8888, @@ -14665,7 +13922,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Necessitatibus excepturi reprehenderit." } }, "patroni_port": 8888, @@ -14795,86 +14053,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] - } - }, - "port": 0, - "service_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "service_type": "rag", - "version": "latest" - }, - { - "config": { - "llm_model": "gpt-4", - "llm_provider": "openai", - "openai_api_key": "sk-..." - }, - "connect_as": "app", - "cpus": "500m", - "database_connection": { - "target_nodes": [ - "n1", - "n2" - ], - "target_session_attrs": "primary" - }, - "host_ids": [ - "76f9b8c0-4958-11f0-a489-3bb29577c696", - "76f9b8c0-4958-11f0-a489-3bb29577c696" - ], - "memory": "512M", - "orchestrator_opts": { - "swarm": { - "extra_labels": { - "traefik.enable": "true", - "traefik.tcp.routers.mydb.rule": "HostSNI(`mydb.example.com`)" - }, - "extra_networks": [ - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" - }, - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" - }, - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" - } ], - "extra_volumes": [ - { - "destination_path": "/backups/container", - "host_path": "/Users/user/backups/host" - }, - { - "destination_path": "/backups/container", - "host_path": "/Users/user/backups/host" - }, - { - "destination_path": "/backups/container", - "host_path": "/Users/user/backups/host" - } - ] + "image": "Necessitatibus excepturi reprehenderit." } }, "port": 0, @@ -14953,7 +14133,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Necessitatibus excepturi reprehenderit." } }, "port": 0, @@ -15032,7 +14213,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Necessitatibus excepturi reprehenderit." } }, "port": 0, @@ -15080,7 +14262,7 @@ "CREATEDB", "CREATEROLE" ], - "db_owner": false, + "db_owner": true, "password": "secret", "roles": [ "pgedge_superuser" @@ -15093,7 +14275,7 @@ "CREATEDB", "CREATEROLE" ], - "db_owner": false, + "db_owner": true, "password": "secret", "roles": [ "pgedge_superuser" @@ -15106,7 +14288,7 @@ "CREATEDB", "CREATEROLE" ], - "db_owner": false, + "db_owner": true, "password": "secret", "roles": [ "pgedge_superuser" @@ -15278,7 +14460,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "patroni_port": 8888, @@ -15324,180 +14507,105 @@ "source_node_name": "n1" }, "source_node": "n1" - } - ], - "minItems": 1, - "maxItems": 9 - }, - "orchestrator_opts": { - "$ref": "#/components/schemas/OrchestratorOpts" - }, - "patroni_port": { - "type": "integer", - "description": "The port used by Patroni for this database. If the port is 0, each instance will be assigned a random port. NOTE: This field is not currently supported for Docker Swarm.", - "example": 8888, - "format": "int64", - "minimum": 0, - "maximum": 65535 - }, - "pg_hba_conf": { - "type": "array", - "items": { - "type": "string", - "example": "Nisi nihil corporis perspiciatis et." - }, - "description": "Additional pg_hba.conf entries, one rule per array element. Inserted between control-plane's system-user rules and its catch-all, so they cannot affect control-plane-internal connectivity (Patroni, replication, health checks). Node-level pg_hba_conf entries are prepended to these.", - "example": [ - "hostssl all myapp_user 203.0.113.0/24 scram-sha-256", - "hostssl all alice 0.0.0.0/0 cert clientcert=verify-full map=ssl_users" - ] - }, - "pg_ident_conf": { - "type": "array", - "items": { - "type": "string", - "example": "Blanditiis et accusamus repellat fuga occaecati." - }, - "description": "Additional pg_ident.conf entries, one mapping per array element. Purely additive; control-plane writes no pg_ident entries of its own. The primary use case is cert auth with map= translating certificate CNs to PostgreSQL usernames.", - "example": [ - "ssl_users CN=alice,O=example alice" - ] - }, - "port": { - "type": "integer", - "description": "The port used by the Postgres database. If the port is 0, each instance will be assigned a random port. If the port is unspecified, the database will not be exposed on any port, dependent on orchestrator support for that feature.", - "example": 5432, - "format": "int64", - "minimum": 0, - "maximum": 65535 - }, - "postgres_version": { - "type": "string", - "description": "The Postgres version in 'major.minor' format.", - "example": "17.6", - "pattern": "^\\d{2}\\.\\d{1,2}$" - }, - "postgresql_conf": { - "type": "object", - "description": "Additional postgresql.conf settings. Will be merged with the settings provided by control-plane.", - "example": { - "max_connections": 1000 - }, - "maxLength": 64, - "additionalProperties": true - }, - "restore_config": { - "$ref": "#/components/schemas/RestoreConfigSpec" - }, - "scripts": { - "$ref": "#/components/schemas/DatabaseScripts" - }, - "services": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ServiceSpec3" - }, - "description": "Service instances to run alongside the database (e.g., MCP servers).", - "example": [ + }, { - "config": { - "llm_model": "gpt-4", - "llm_provider": "openai", - "openai_api_key": "sk-..." - }, - "connect_as": "app", - "cpus": "500m", - "database_connection": { - "target_nodes": [ - "n1", - "n2" - ], - "target_session_attrs": "primary" - }, - "host_ids": [ - "76f9b8c0-4958-11f0-a489-3bb29577c696", - "76f9b8c0-4958-11f0-a489-3bb29577c696" - ], - "memory": "512M", - "orchestrator_opts": { - "swarm": { - "extra_labels": { - "traefik.enable": "true", - "traefik.tcp.routers.mydb.rule": "HostSNI(`mydb.example.com`)" - }, - "extra_networks": [ - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" - }, - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" + "backup_config": { + "repositories": [ + { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", + "storage-upload-chunk-size": "5MiB" }, - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" - } - ], - "extra_volumes": [ - { - "destination_path": "/backups/container", - "host_path": "/Users/user/backups/host" + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "retention_full": 2, + "retention_full_type": "count", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + }, + { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", + "storage-upload-chunk-size": "5MiB" }, - { - "destination_path": "/backups/container", - "host_path": "/Users/user/backups/host" + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "retention_full": 2, + "retention_full_type": "count", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + }, + { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", + "storage-upload-chunk-size": "5MiB" }, - { - "destination_path": "/backups/container", - "host_path": "/Users/user/backups/host" - } - ] - } - }, - "port": 0, - "service_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "service_type": "rag", - "version": "latest" - }, - { - "config": { - "llm_model": "gpt-4", - "llm_provider": "openai", - "openai_api_key": "sk-..." - }, - "connect_as": "app", - "cpus": "500m", - "database_connection": { - "target_nodes": [ - "n1", - "n2" + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "retention_full": 2, + "retention_full_type": "count", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + } ], - "target_session_attrs": "primary" + "schedules": [ + { + "cron_expression": "0 6 * * ?", + "id": "daily-full-backup", + "type": "full" + }, + { + "cron_expression": "0 6 * * ?", + "id": "daily-full-backup", + "type": "full" + }, + { + "cron_expression": "0 6 * * ?", + "id": "daily-full-backup", + "type": "full" + } + ] }, + "cpus": "500m", "host_ids": [ "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], - "memory": "512M", + "memory": "500M", + "name": "n1", "orchestrator_opts": { "swarm": { "extra_labels": { @@ -15549,34 +14657,152 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, - "port": 0, - "service_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "service_type": "rag", - "version": "latest" - }, - { - "config": { - "llm_model": "gpt-4", - "llm_provider": "openai", - "openai_api_key": "sk-..." + "patroni_port": 8888, + "pg_hba_conf": [ + "host example myapp_user 10.0.0.0/8 scram-sha-256" + ], + "pg_ident_conf": [ + "ssl_users CN=alice,O=example alice" + ], + "port": 5432, + "postgres_version": "17.6", + "postgresql_conf": { + "max_connections": 1000 }, - "connect_as": "app", - "cpus": "500m", - "database_connection": { - "target_nodes": [ - "n1", - "n2" + "restore_config": { + "repository": { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + }, + "restore_options": { + "set": "20250505-153628F", + "target": "123456", + "type": "xid" + }, + "source_database_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "source_database_name": "northwind", + "source_node_name": "n1" + }, + "source_node": "n1" + }, + { + "backup_config": { + "repositories": [ + { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", + "storage-upload-chunk-size": "5MiB" + }, + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "retention_full": 2, + "retention_full_type": "count", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + }, + { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", + "storage-upload-chunk-size": "5MiB" + }, + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "retention_full": 2, + "retention_full_type": "count", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + }, + { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", + "storage-upload-chunk-size": "5MiB" + }, + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "retention_full": 2, + "retention_full_type": "count", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + } ], - "target_session_attrs": "primary" + "schedules": [ + { + "cron_expression": "0 6 * * ?", + "id": "daily-full-backup", + "type": "full" + }, + { + "cron_expression": "0 6 * * ?", + "id": "daily-full-backup", + "type": "full" + }, + { + "cron_expression": "0 6 * * ?", + "id": "daily-full-backup", + "type": "full" + } + ] }, + "cpus": "500m", "host_ids": [ "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], - "memory": "512M", + "memory": "500M", + "name": "n1", "orchestrator_opts": { "swarm": { "extra_labels": { @@ -15628,28 +14854,304 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, - "port": 0, - "service_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "service_type": "rag", - "version": "latest" + "patroni_port": 8888, + "pg_hba_conf": [ + "host example myapp_user 10.0.0.0/8 scram-sha-256" + ], + "pg_ident_conf": [ + "ssl_users CN=alice,O=example alice" + ], + "port": 5432, + "postgres_version": "17.6", + "postgresql_conf": { + "max_connections": 1000 + }, + "restore_config": { + "repository": { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + }, + "restore_options": { + "set": "20250505-153628F", + "target": "123456", + "type": "xid" + }, + "source_database_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "source_database_name": "northwind", + "source_node_name": "n1" + }, + "source_node": "n1" } + ], + "minItems": 1, + "maxItems": 9 + }, + "orchestrator_opts": { + "$ref": "#/components/schemas/OrchestratorOpts" + }, + "patroni_port": { + "type": "integer", + "description": "The port used by Patroni for this database. If the port is 0, each instance will be assigned a random port. NOTE: This field is not currently supported for Docker Swarm.", + "example": 8888, + "format": "int64", + "minimum": 0, + "maximum": 65535 + }, + "pg_hba_conf": { + "type": "array", + "items": { + "type": "string", + "example": "Eaque et." + }, + "description": "Additional pg_hba.conf entries, one rule per array element. Inserted between control-plane's system-user rules and its catch-all, so they cannot affect control-plane-internal connectivity (Patroni, replication, health checks). Node-level pg_hba_conf entries are prepended to these.", + "example": [ + "hostssl all myapp_user 203.0.113.0/24 scram-sha-256", + "hostssl all alice 0.0.0.0/0 cert clientcert=verify-full map=ssl_users" ] }, - "spock_version": { + "pg_ident_conf": { + "type": "array", + "items": { + "type": "string", + "example": "Minima ipsum ut impedit quo." + }, + "description": "Additional pg_ident.conf entries, one mapping per array element. Purely additive; control-plane writes no pg_ident entries of its own. The primary use case is cert auth with map= translating certificate CNs to PostgreSQL usernames.", + "example": [ + "ssl_users CN=alice,O=example alice" + ] + }, + "port": { + "type": "integer", + "description": "The port used by the Postgres database. If the port is 0, each instance will be assigned a random port. If the port is unspecified, the database will not be exposed on any port, dependent on orchestrator support for that feature.", + "example": 5432, + "format": "int64", + "minimum": 0, + "maximum": 65535 + }, + "postgres_version": { "type": "string", - "description": "The major version of the Spock extension.", - "example": "5", - "pattern": "^\\d{1}$" - } - }, - "example": { - "backup_config": { - "repositories": [ + "description": "The Postgres version in 'major.minor' format.", + "example": "17.6", + "pattern": "^\\d{2}\\.\\d{1,2}$" + }, + "postgresql_conf": { + "type": "object", + "description": "Additional postgresql.conf settings. Will be merged with the settings provided by control-plane.", + "example": { + "max_connections": 1000 + }, + "maxLength": 64, + "additionalProperties": true + }, + "restore_config": { + "$ref": "#/components/schemas/RestoreConfigSpec" + }, + "scripts": { + "$ref": "#/components/schemas/DatabaseScripts" + }, + "services": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ServiceSpec3" + }, + "description": "Service instances to run alongside the database (e.g., MCP servers).", + "example": [ { - "azure_account": "pgedge-backups", + "config": { + "llm_model": "gpt-4", + "llm_provider": "openai", + "openai_api_key": "sk-..." + }, + "connect_as": "app", + "cpus": "500m", + "database_connection": { + "target_nodes": [ + "n1", + "n2" + ], + "target_session_attrs": "primary" + }, + "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", + "76f9b8c0-4958-11f0-a489-3bb29577c696", + "76f9b8c0-4958-11f0-a489-3bb29577c696" + ], + "memory": "512M", + "orchestrator_opts": { + "swarm": { + "extra_labels": { + "traefik.enable": "true", + "traefik.tcp.routers.mydb.rule": "HostSNI(`mydb.example.com`)" + }, + "extra_networks": [ + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + }, + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + }, + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + } + ], + "extra_volumes": [ + { + "destination_path": "/backups/container", + "host_path": "/Users/user/backups/host" + }, + { + "destination_path": "/backups/container", + "host_path": "/Users/user/backups/host" + }, + { + "destination_path": "/backups/container", + "host_path": "/Users/user/backups/host" + } + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." + } + }, + "port": 0, + "service_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "service_type": "rag", + "version": "latest" + }, + { + "config": { + "llm_model": "gpt-4", + "llm_provider": "openai", + "openai_api_key": "sk-..." + }, + "connect_as": "app", + "cpus": "500m", + "database_connection": { + "target_nodes": [ + "n1", + "n2" + ], + "target_session_attrs": "primary" + }, + "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", + "76f9b8c0-4958-11f0-a489-3bb29577c696", + "76f9b8c0-4958-11f0-a489-3bb29577c696" + ], + "memory": "512M", + "orchestrator_opts": { + "swarm": { + "extra_labels": { + "traefik.enable": "true", + "traefik.tcp.routers.mydb.rule": "HostSNI(`mydb.example.com`)" + }, + "extra_networks": [ + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + }, + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + }, + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + } + ], + "extra_volumes": [ + { + "destination_path": "/backups/container", + "host_path": "/Users/user/backups/host" + }, + { + "destination_path": "/backups/container", + "host_path": "/Users/user/backups/host" + }, + { + "destination_path": "/backups/container", + "host_path": "/Users/user/backups/host" + } + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." + } + }, + "port": 0, + "service_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "service_type": "rag", + "version": "latest" + } + ] + }, + "spock_version": { + "type": "string", + "description": "The major version of the Spock extension.", + "example": "5", + "pattern": "^\\d{1}$" + } + }, + "example": { + "backup_config": { + "repositories": [ + { + "azure_account": "pgedge-backups", "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", "azure_endpoint": "blob.core.usgovcloudapi.net", "azure_key": "YXpLZXk=", @@ -15745,7 +15247,7 @@ "CREATEDB", "CREATEROLE" ], - "db_owner": false, + "db_owner": true, "password": "secret", "roles": [ "pgedge_superuser" @@ -15758,7 +15260,7 @@ "CREATEDB", "CREATEROLE" ], - "db_owner": false, + "db_owner": true, "password": "secret", "roles": [ "pgedge_superuser" @@ -15771,7 +15273,7 @@ "CREATEDB", "CREATEROLE" ], - "db_owner": false, + "db_owner": true, "password": "secret", "roles": [ "pgedge_superuser" @@ -15930,7 +15432,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "patroni_port": 8888, @@ -16126,7 +15629,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "patroni_port": 8888, @@ -16225,7 +15729,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "patroni_port": 8888, @@ -16300,6 +15805,7 @@ "target_session_attrs": "primary" }, "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], @@ -16355,7 +15861,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "port": 0, @@ -16379,6 +15886,7 @@ "target_session_attrs": "primary" }, "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], @@ -16434,7 +15942,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "port": 0, @@ -16482,7 +15991,7 @@ "CREATEDB", "CREATEROLE" ], - "db_owner": false, + "db_owner": true, "password": "secret", "roles": [ "pgedge_superuser" @@ -16495,7 +16004,7 @@ "CREATEDB", "CREATEROLE" ], - "db_owner": false, + "db_owner": true, "password": "secret", "roles": [ "pgedge_superuser" @@ -16508,7 +16017,7 @@ "CREATEDB", "CREATEROLE" ], - "db_owner": false, + "db_owner": true, "password": "secret", "roles": [ "pgedge_superuser" @@ -16680,7 +16189,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "patroni_port": 8888, @@ -16726,101 +16236,105 @@ "source_node_name": "n1" }, "source_node": "n1" - } - ], - "minItems": 1, - "maxItems": 9 - }, - "orchestrator_opts": { - "$ref": "#/components/schemas/OrchestratorOpts" - }, - "patroni_port": { - "type": "integer", - "description": "The port used by Patroni for this database. If the port is 0, each instance will be assigned a random port. NOTE: This field is not currently supported for Docker Swarm.", - "example": 8888, - "format": "int64", - "minimum": 0, - "maximum": 65535 - }, - "pg_hba_conf": { - "type": "array", - "items": { - "type": "string", - "example": "Dignissimos voluptas vel earum eaque." - }, - "description": "Additional pg_hba.conf entries, one rule per array element. Inserted between control-plane's system-user rules and its catch-all, so they cannot affect control-plane-internal connectivity (Patroni, replication, health checks). Node-level pg_hba_conf entries are prepended to these.", - "example": [ - "hostssl all myapp_user 203.0.113.0/24 scram-sha-256", - "hostssl all alice 0.0.0.0/0 cert clientcert=verify-full map=ssl_users" - ] - }, - "pg_ident_conf": { - "type": "array", - "items": { - "type": "string", - "example": "Et minima ipsum ut impedit." - }, - "description": "Additional pg_ident.conf entries, one mapping per array element. Purely additive; control-plane writes no pg_ident entries of its own. The primary use case is cert auth with map= translating certificate CNs to PostgreSQL usernames.", - "example": [ - "ssl_users CN=alice,O=example alice" - ] - }, - "port": { - "type": "integer", - "description": "The port used by the Postgres database. If the port is 0, each instance will be assigned a random port. If the port is unspecified, the database will not be exposed on any port, dependent on orchestrator support for that feature.", - "example": 5432, - "format": "int64", - "minimum": 0, - "maximum": 65535 - }, - "postgres_version": { - "type": "string", - "description": "The Postgres version in 'major.minor' format.", - "example": "17.6", - "pattern": "^\\d{2}\\.\\d{1,2}$" - }, - "postgresql_conf": { - "type": "object", - "description": "Additional postgresql.conf settings. Will be merged with the settings provided by control-plane.", - "example": { - "max_connections": 1000 - }, - "maxLength": 64, - "additionalProperties": true - }, - "restore_config": { - "$ref": "#/components/schemas/RestoreConfigSpec" - }, - "scripts": { - "$ref": "#/components/schemas/DatabaseScripts" - }, - "services": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ServiceSpec4" - }, - "description": "Service instances to run alongside the database (e.g., MCP servers).", - "example": [ + }, { - "config": { - "llm_model": "gpt-4", - "llm_provider": "openai", - "openai_api_key": "sk-..." - }, - "connect_as": "app", - "cpus": "500m", - "database_connection": { - "target_nodes": [ - "n1", - "n2" + "backup_config": { + "repositories": [ + { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", + "storage-upload-chunk-size": "5MiB" + }, + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "retention_full": 2, + "retention_full_type": "count", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + }, + { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", + "storage-upload-chunk-size": "5MiB" + }, + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "retention_full": 2, + "retention_full_type": "count", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + }, + { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", + "storage-upload-chunk-size": "5MiB" + }, + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "retention_full": 2, + "retention_full_type": "count", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + } ], - "target_session_attrs": "primary" + "schedules": [ + { + "cron_expression": "0 6 * * ?", + "id": "daily-full-backup", + "type": "full" + }, + { + "cron_expression": "0 6 * * ?", + "id": "daily-full-backup", + "type": "full" + }, + { + "cron_expression": "0 6 * * ?", + "id": "daily-full-backup", + "type": "full" + } + ] }, + "cpus": "500m", "host_ids": [ "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], - "memory": "512M", + "memory": "500M", + "name": "n1", "orchestrator_opts": { "swarm": { "extra_labels": { @@ -16872,14 +16386,128 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, - "port": 0, - "service_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "service_type": "rag", - "version": "latest" - }, + "patroni_port": 8888, + "pg_hba_conf": [ + "host example myapp_user 10.0.0.0/8 scram-sha-256" + ], + "pg_ident_conf": [ + "ssl_users CN=alice,O=example alice" + ], + "port": 5432, + "postgres_version": "17.6", + "postgresql_conf": { + "max_connections": 1000 + }, + "restore_config": { + "repository": { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + }, + "restore_options": { + "set": "20250505-153628F", + "target": "123456", + "type": "xid" + }, + "source_database_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "source_database_name": "northwind", + "source_node_name": "n1" + }, + "source_node": "n1" + } + ], + "minItems": 1, + "maxItems": 9 + }, + "orchestrator_opts": { + "$ref": "#/components/schemas/OrchestratorOpts" + }, + "patroni_port": { + "type": "integer", + "description": "The port used by Patroni for this database. If the port is 0, each instance will be assigned a random port. NOTE: This field is not currently supported for Docker Swarm.", + "example": 8888, + "format": "int64", + "minimum": 0, + "maximum": 65535 + }, + "pg_hba_conf": { + "type": "array", + "items": { + "type": "string", + "example": "Dolorum natus sunt harum magnam sunt." + }, + "description": "Additional pg_hba.conf entries, one rule per array element. Inserted between control-plane's system-user rules and its catch-all, so they cannot affect control-plane-internal connectivity (Patroni, replication, health checks). Node-level pg_hba_conf entries are prepended to these.", + "example": [ + "hostssl all myapp_user 203.0.113.0/24 scram-sha-256", + "hostssl all alice 0.0.0.0/0 cert clientcert=verify-full map=ssl_users" + ] + }, + "pg_ident_conf": { + "type": "array", + "items": { + "type": "string", + "example": "In veniam officia ratione." + }, + "description": "Additional pg_ident.conf entries, one mapping per array element. Purely additive; control-plane writes no pg_ident entries of its own. The primary use case is cert auth with map= translating certificate CNs to PostgreSQL usernames.", + "example": [ + "ssl_users CN=alice,O=example alice" + ] + }, + "port": { + "type": "integer", + "description": "The port used by the Postgres database. If the port is 0, each instance will be assigned a random port. If the port is unspecified, the database will not be exposed on any port, dependent on orchestrator support for that feature.", + "example": 5432, + "format": "int64", + "minimum": 0, + "maximum": 65535 + }, + "postgres_version": { + "type": "string", + "description": "The Postgres version in 'major.minor' format.", + "example": "17.6", + "pattern": "^\\d{2}\\.\\d{1,2}$" + }, + "postgresql_conf": { + "type": "object", + "description": "Additional postgresql.conf settings. Will be merged with the settings provided by control-plane.", + "example": { + "max_connections": 1000 + }, + "maxLength": 64, + "additionalProperties": true + }, + "restore_config": { + "$ref": "#/components/schemas/RestoreConfigSpec" + }, + "scripts": { + "$ref": "#/components/schemas/DatabaseScripts" + }, + "services": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ServiceSpec4" + }, + "description": "Service instances to run alongside the database (e.g., MCP servers).", + "example": [ { "config": { "llm_model": "gpt-4", @@ -16896,6 +16524,7 @@ "target_session_attrs": "primary" }, "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], @@ -16951,7 +16580,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "port": 0, @@ -16975,6 +16605,7 @@ "target_session_attrs": "primary" }, "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], @@ -17030,86 +16661,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] - } - }, - "port": 0, - "service_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "service_type": "rag", - "version": "latest" - }, - { - "config": { - "llm_model": "gpt-4", - "llm_provider": "openai", - "openai_api_key": "sk-..." - }, - "connect_as": "app", - "cpus": "500m", - "database_connection": { - "target_nodes": [ - "n1", - "n2" - ], - "target_session_attrs": "primary" - }, - "host_ids": [ - "76f9b8c0-4958-11f0-a489-3bb29577c696", - "76f9b8c0-4958-11f0-a489-3bb29577c696" - ], - "memory": "512M", - "orchestrator_opts": { - "swarm": { - "extra_labels": { - "traefik.enable": "true", - "traefik.tcp.routers.mydb.rule": "HostSNI(`mydb.example.com`)" - }, - "extra_networks": [ - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" - }, - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" - }, - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" - } - ], - "extra_volumes": [ - { - "destination_path": "/backups/container", - "host_path": "/Users/user/backups/host" - }, - { - "destination_path": "/backups/container", - "host_path": "/Users/user/backups/host" - }, - { - "destination_path": "/backups/container", - "host_path": "/Users/user/backups/host" - } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "port": 0, @@ -17226,7 +16779,7 @@ "CREATEDB", "CREATEROLE" ], - "db_owner": false, + "db_owner": true, "password": "secret", "roles": [ "pgedge_superuser" @@ -17239,7 +16792,7 @@ "CREATEDB", "CREATEROLE" ], - "db_owner": false, + "db_owner": true, "password": "secret", "roles": [ "pgedge_superuser" @@ -17252,7 +16805,7 @@ "CREATEDB", "CREATEROLE" ], - "db_owner": false, + "db_owner": true, "password": "secret", "roles": [ "pgedge_superuser" @@ -17411,7 +16964,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "patroni_port": 8888, @@ -17607,7 +17161,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "patroni_port": 8888, @@ -17803,7 +17358,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "patroni_port": 8888, @@ -17902,7 +17458,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "patroni_port": 8888, @@ -17977,6 +17534,7 @@ "target_session_attrs": "primary" }, "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], @@ -18032,7 +17590,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "port": 0, @@ -18056,6 +17615,7 @@ "target_session_attrs": "primary" }, "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], @@ -18111,7 +17671,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "port": 0, @@ -18135,6 +17696,7 @@ "target_session_attrs": "primary" }, "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], @@ -18190,7 +17752,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "port": 0, @@ -18214,6 +17777,7 @@ "target_session_attrs": "primary" }, "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], @@ -18269,7 +17833,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "port": 0, @@ -18317,7 +17882,7 @@ "CREATEDB", "CREATEROLE" ], - "db_owner": false, + "db_owner": true, "password": "secret", "roles": [ "pgedge_superuser" @@ -18330,7 +17895,7 @@ "CREATEDB", "CREATEROLE" ], - "db_owner": false, + "db_owner": true, "password": "secret", "roles": [ "pgedge_superuser" @@ -18343,7 +17908,7 @@ "CREATEDB", "CREATEROLE" ], - "db_owner": false, + "db_owner": true, "password": "secret", "roles": [ "pgedge_superuser" @@ -18392,29 +17957,6 @@ "s3_region": "us-east-1", "type": "s3" }, - { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", - "storage-upload-chunk-size": "5MiB" - }, - "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "gcs_endpoint": "localhost", - "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", - "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "retention_full": 2, - "retention_full_type": "count", - "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "s3_endpoint": "s3.us-east-1.amazonaws.com", - "s3_key": "AKIAIOSFODNN7EXAMPLE", - "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "s3_region": "us-east-1", - "type": "s3" - }, { "azure_account": "pgedge-backups", "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", @@ -18459,7 +18001,6 @@ }, "cpus": "500m", "host_ids": [ - "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], "memory": "500M", @@ -18515,7 +18056,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Quia reiciendis et odio omnis itaque cum." } }, "patroni_port": 8888, @@ -18561,178 +18103,81 @@ "source_node_name": "n1" }, "source_node": "n1" - } - ], - "minItems": 1, - "maxItems": 9 - }, - "orchestrator_opts": { - "$ref": "#/components/schemas/OrchestratorOpts" - }, - "patroni_port": { - "type": "integer", - "description": "The port used by Patroni for this database. If the port is 0, each instance will be assigned a random port. NOTE: This field is not currently supported for Docker Swarm.", - "example": 8888, - "format": "int64", - "minimum": 0, - "maximum": 65535 - }, - "pg_hba_conf": { - "type": "array", - "items": { - "type": "string", - "example": "Nobis quam sequi." - }, - "description": "Additional pg_hba.conf entries, one rule per array element. Inserted between control-plane's system-user rules and its catch-all, so they cannot affect control-plane-internal connectivity (Patroni, replication, health checks). Node-level pg_hba_conf entries are prepended to these.", - "example": [ - "hostssl all myapp_user 203.0.113.0/24 scram-sha-256", - "hostssl all alice 0.0.0.0/0 cert clientcert=verify-full map=ssl_users" - ] - }, - "pg_ident_conf": { - "type": "array", - "items": { - "type": "string", - "example": "Aliquid porro dolorum natus sunt harum magnam." - }, - "description": "Additional pg_ident.conf entries, one mapping per array element. Purely additive; control-plane writes no pg_ident entries of its own. The primary use case is cert auth with map= translating certificate CNs to PostgreSQL usernames.", - "example": [ - "ssl_users CN=alice,O=example alice" - ] - }, - "port": { - "type": "integer", - "description": "The port used by the Postgres database. If the port is 0, each instance will be assigned a random port. If the port is unspecified, the database will not be exposed on any port, dependent on orchestrator support for that feature.", - "example": 5432, - "format": "int64", - "minimum": 0, - "maximum": 65535 - }, - "postgres_version": { - "type": "string", - "description": "The Postgres version in 'major.minor' format.", - "example": "17.6", - "pattern": "^\\d{2}\\.\\d{1,2}$" - }, - "postgresql_conf": { - "type": "object", - "description": "Additional postgresql.conf settings. Will be merged with the settings provided by control-plane.", - "example": { - "max_connections": 1000 - }, - "maxLength": 64, - "additionalProperties": true - }, - "restore_config": { - "$ref": "#/components/schemas/RestoreConfigSpec" - }, - "scripts": { - "$ref": "#/components/schemas/DatabaseScripts" - }, - "services": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ServiceSpec5" - }, - "description": "Service instances to run alongside the database (e.g., MCP servers).", - "example": [ + }, { - "config": { - "llm_model": "gpt-4", - "llm_provider": "openai", - "openai_api_key": "sk-..." - }, - "connect_as": "app", - "cpus": "500m", - "database_connection": { - "target_nodes": [ - "n1", - "n2" - ], - "target_session_attrs": "primary" - }, - "host_ids": [ - "76f9b8c0-4958-11f0-a489-3bb29577c696" - ], - "memory": "512M", - "orchestrator_opts": { - "swarm": { - "extra_labels": { - "traefik.enable": "true", - "traefik.tcp.routers.mydb.rule": "HostSNI(`mydb.example.com`)" - }, - "extra_networks": [ - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" + "backup_config": { + "repositories": [ + { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", + "storage-upload-chunk-size": "5MiB" }, - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" - }, - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" - } - ], - "extra_volumes": [ - { - "destination_path": "/backups/container", - "host_path": "/Users/user/backups/host" - }, - { - "destination_path": "/backups/container", - "host_path": "/Users/user/backups/host" + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "retention_full": 2, + "retention_full_type": "count", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + }, + { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", + "storage-upload-chunk-size": "5MiB" }, - { - "destination_path": "/backups/container", - "host_path": "/Users/user/backups/host" - } - ] - } - }, - "port": 0, - "service_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "service_type": "rag", - "version": "latest" - }, - { - "config": { - "llm_model": "gpt-4", - "llm_provider": "openai", - "openai_api_key": "sk-..." - }, - "connect_as": "app", - "cpus": "500m", - "database_connection": { - "target_nodes": [ - "n1", - "n2" + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "retention_full": 2, + "retention_full_type": "count", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + } ], - "target_session_attrs": "primary" + "schedules": [ + { + "cron_expression": "0 6 * * ?", + "id": "daily-full-backup", + "type": "full" + }, + { + "cron_expression": "0 6 * * ?", + "id": "daily-full-backup", + "type": "full" + }, + { + "cron_expression": "0 6 * * ?", + "id": "daily-full-backup", + "type": "full" + } + ] }, + "cpus": "500m", "host_ids": [ "76f9b8c0-4958-11f0-a489-3bb29577c696" ], - "memory": "512M", + "memory": "500M", + "name": "n1", "orchestrator_opts": { "swarm": { "extra_labels": { @@ -18784,33 +18229,128 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Quia reiciendis et odio omnis itaque cum." } }, - "port": 0, - "service_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "service_type": "rag", - "version": "latest" + "patroni_port": 8888, + "pg_hba_conf": [ + "host example myapp_user 10.0.0.0/8 scram-sha-256" + ], + "pg_ident_conf": [ + "ssl_users CN=alice,O=example alice" + ], + "port": 5432, + "postgres_version": "17.6", + "postgresql_conf": { + "max_connections": 1000 + }, + "restore_config": { + "repository": { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + }, + "restore_options": { + "set": "20250505-153628F", + "target": "123456", + "type": "xid" + }, + "source_database_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "source_database_name": "northwind", + "source_node_name": "n1" + }, + "source_node": "n1" }, { - "config": { - "llm_model": "gpt-4", - "llm_provider": "openai", - "openai_api_key": "sk-..." - }, - "connect_as": "app", - "cpus": "500m", - "database_connection": { - "target_nodes": [ - "n1", - "n2" + "backup_config": { + "repositories": [ + { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", + "storage-upload-chunk-size": "5MiB" + }, + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "retention_full": 2, + "retention_full_type": "count", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + }, + { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", + "storage-upload-chunk-size": "5MiB" + }, + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "retention_full": 2, + "retention_full_type": "count", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + } ], - "target_session_attrs": "primary" + "schedules": [ + { + "cron_expression": "0 6 * * ?", + "id": "daily-full-backup", + "type": "full" + }, + { + "cron_expression": "0 6 * * ?", + "id": "daily-full-backup", + "type": "full" + }, + { + "cron_expression": "0 6 * * ?", + "id": "daily-full-backup", + "type": "full" + } + ] }, + "cpus": "500m", "host_ids": [ "76f9b8c0-4958-11f0-a489-3bb29577c696" ], - "memory": "512M", + "memory": "500M", + "name": "n1", "orchestrator_opts": { "swarm": { "extra_labels": { @@ -18862,30 +18402,145 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Quia reiciendis et odio omnis itaque cum." } }, - "port": 0, - "service_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "service_type": "rag", - "version": "latest" - }, - { - "config": { - "llm_model": "gpt-4", - "llm_provider": "openai", - "openai_api_key": "sk-..." - }, - "connect_as": "app", - "cpus": "500m", - "database_connection": { - "target_nodes": [ - "n1", - "n2" - ], - "target_session_attrs": "primary" - }, + "patroni_port": 8888, + "pg_hba_conf": [ + "host example myapp_user 10.0.0.0/8 scram-sha-256" + ], + "pg_ident_conf": [ + "ssl_users CN=alice,O=example alice" + ], + "port": 5432, + "postgres_version": "17.6", + "postgresql_conf": { + "max_connections": 1000 + }, + "restore_config": { + "repository": { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + }, + "restore_options": { + "set": "20250505-153628F", + "target": "123456", + "type": "xid" + }, + "source_database_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "source_database_name": "northwind", + "source_node_name": "n1" + }, + "source_node": "n1" + } + ], + "minItems": 1, + "maxItems": 9 + }, + "orchestrator_opts": { + "$ref": "#/components/schemas/OrchestratorOpts" + }, + "patroni_port": { + "type": "integer", + "description": "The port used by Patroni for this database. If the port is 0, each instance will be assigned a random port. NOTE: This field is not currently supported for Docker Swarm.", + "example": 8888, + "format": "int64", + "minimum": 0, + "maximum": 65535 + }, + "pg_hba_conf": { + "type": "array", + "items": { + "type": "string", + "example": "Eveniet sit dignissimos ducimus reiciendis asperiores." + }, + "description": "Additional pg_hba.conf entries, one rule per array element. Inserted between control-plane's system-user rules and its catch-all, so they cannot affect control-plane-internal connectivity (Patroni, replication, health checks). Node-level pg_hba_conf entries are prepended to these.", + "example": [ + "hostssl all myapp_user 203.0.113.0/24 scram-sha-256", + "hostssl all alice 0.0.0.0/0 cert clientcert=verify-full map=ssl_users" + ] + }, + "pg_ident_conf": { + "type": "array", + "items": { + "type": "string", + "example": "Veritatis consequuntur molestiae architecto." + }, + "description": "Additional pg_ident.conf entries, one mapping per array element. Purely additive; control-plane writes no pg_ident entries of its own. The primary use case is cert auth with map= translating certificate CNs to PostgreSQL usernames.", + "example": [ + "ssl_users CN=alice,O=example alice" + ] + }, + "port": { + "type": "integer", + "description": "The port used by the Postgres database. If the port is 0, each instance will be assigned a random port. If the port is unspecified, the database will not be exposed on any port, dependent on orchestrator support for that feature.", + "example": 5432, + "format": "int64", + "minimum": 0, + "maximum": 65535 + }, + "postgres_version": { + "type": "string", + "description": "The Postgres version in 'major.minor' format.", + "example": "17.6", + "pattern": "^\\d{2}\\.\\d{1,2}$" + }, + "postgresql_conf": { + "type": "object", + "description": "Additional postgresql.conf settings. Will be merged with the settings provided by control-plane.", + "example": { + "max_connections": 1000 + }, + "maxLength": 64, + "additionalProperties": true + }, + "restore_config": { + "$ref": "#/components/schemas/RestoreConfigSpec" + }, + "scripts": { + "$ref": "#/components/schemas/DatabaseScripts" + }, + "services": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ServiceSpec5" + }, + "description": "Service instances to run alongside the database (e.g., MCP servers).", + "example": [ + { + "config": { + "llm_model": "gpt-4", + "llm_provider": "openai", + "openai_api_key": "sk-..." + }, + "connect_as": "app", + "cpus": "500m", + "database_connection": { + "target_nodes": [ + "n1", + "n2" + ], + "target_session_attrs": "primary" + }, "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], "memory": "512M", @@ -18940,58 +18595,276 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Quia reiciendis et odio omnis itaque cum." } }, "port": 0, "service_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", "service_type": "rag", "version": "latest" - } - ] - }, - "spock_version": { - "type": "string", - "description": "The major version of the Spock extension.", - "example": "5", - "pattern": "^\\d{1}$" - } - }, - "example": { - "backup_config": { - "repositories": [ + }, { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", - "storage-upload-chunk-size": "5MiB" + "config": { + "llm_model": "gpt-4", + "llm_provider": "openai", + "openai_api_key": "sk-..." }, - "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "gcs_endpoint": "localhost", - "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", - "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "retention_full": 2, - "retention_full_type": "count", - "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "s3_endpoint": "s3.us-east-1.amazonaws.com", - "s3_key": "AKIAIOSFODNN7EXAMPLE", - "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "s3_region": "us-east-1", - "type": "s3" + "connect_as": "app", + "cpus": "500m", + "database_connection": { + "target_nodes": [ + "n1", + "n2" + ], + "target_session_attrs": "primary" + }, + "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", + "76f9b8c0-4958-11f0-a489-3bb29577c696" + ], + "memory": "512M", + "orchestrator_opts": { + "swarm": { + "extra_labels": { + "traefik.enable": "true", + "traefik.tcp.routers.mydb.rule": "HostSNI(`mydb.example.com`)" + }, + "extra_networks": [ + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + }, + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + }, + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + } + ], + "extra_volumes": [ + { + "destination_path": "/backups/container", + "host_path": "/Users/user/backups/host" + }, + { + "destination_path": "/backups/container", + "host_path": "/Users/user/backups/host" + }, + { + "destination_path": "/backups/container", + "host_path": "/Users/user/backups/host" + } + ], + "image": "Quia reiciendis et odio omnis itaque cum." + } + }, + "port": 0, + "service_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "service_type": "rag", + "version": "latest" }, { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", - "storage-upload-chunk-size": "5MiB" + "config": { + "llm_model": "gpt-4", + "llm_provider": "openai", + "openai_api_key": "sk-..." + }, + "connect_as": "app", + "cpus": "500m", + "database_connection": { + "target_nodes": [ + "n1", + "n2" + ], + "target_session_attrs": "primary" + }, + "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", + "76f9b8c0-4958-11f0-a489-3bb29577c696" + ], + "memory": "512M", + "orchestrator_opts": { + "swarm": { + "extra_labels": { + "traefik.enable": "true", + "traefik.tcp.routers.mydb.rule": "HostSNI(`mydb.example.com`)" + }, + "extra_networks": [ + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + }, + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + }, + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + } + ], + "extra_volumes": [ + { + "destination_path": "/backups/container", + "host_path": "/Users/user/backups/host" + }, + { + "destination_path": "/backups/container", + "host_path": "/Users/user/backups/host" + }, + { + "destination_path": "/backups/container", + "host_path": "/Users/user/backups/host" + } + ], + "image": "Quia reiciendis et odio omnis itaque cum." + } + }, + "port": 0, + "service_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "service_type": "rag", + "version": "latest" + }, + { + "config": { + "llm_model": "gpt-4", + "llm_provider": "openai", + "openai_api_key": "sk-..." + }, + "connect_as": "app", + "cpus": "500m", + "database_connection": { + "target_nodes": [ + "n1", + "n2" + ], + "target_session_attrs": "primary" + }, + "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", + "76f9b8c0-4958-11f0-a489-3bb29577c696" + ], + "memory": "512M", + "orchestrator_opts": { + "swarm": { + "extra_labels": { + "traefik.enable": "true", + "traefik.tcp.routers.mydb.rule": "HostSNI(`mydb.example.com`)" + }, + "extra_networks": [ + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + }, + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + }, + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + } + ], + "extra_volumes": [ + { + "destination_path": "/backups/container", + "host_path": "/Users/user/backups/host" + }, + { + "destination_path": "/backups/container", + "host_path": "/Users/user/backups/host" + }, + { + "destination_path": "/backups/container", + "host_path": "/Users/user/backups/host" + } + ], + "image": "Quia reiciendis et odio omnis itaque cum." + } + }, + "port": 0, + "service_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "service_type": "rag", + "version": "latest" + } + ] + }, + "spock_version": { + "type": "string", + "description": "The major version of the Spock extension.", + "example": "5", + "pattern": "^\\d{1}$" + } + }, + "example": { + "backup_config": { + "repositories": [ + { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", + "storage-upload-chunk-size": "5MiB" }, "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", "gcs_endpoint": "localhost", @@ -19057,7 +18930,7 @@ "CREATEDB", "CREATEROLE" ], - "db_owner": false, + "db_owner": true, "password": "secret", "roles": [ "pgedge_superuser" @@ -19070,7 +18943,7 @@ "CREATEDB", "CREATEROLE" ], - "db_owner": false, + "db_owner": true, "password": "secret", "roles": [ "pgedge_superuser" @@ -19083,7 +18956,7 @@ "CREATEDB", "CREATEROLE" ], - "db_owner": false, + "db_owner": true, "password": "secret", "roles": [ "pgedge_superuser" @@ -19119,29 +18992,6 @@ "s3_region": "us-east-1", "type": "s3" }, - { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", - "storage-upload-chunk-size": "5MiB" - }, - "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "gcs_endpoint": "localhost", - "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", - "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "retention_full": 2, - "retention_full_type": "count", - "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "s3_endpoint": "s3.us-east-1.amazonaws.com", - "s3_key": "AKIAIOSFODNN7EXAMPLE", - "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "s3_region": "us-east-1", - "type": "s3" - }, { "azure_account": "pgedge-backups", "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", @@ -19186,7 +19036,6 @@ }, "cpus": "500m", "host_ids": [ - "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], "memory": "500M", @@ -19242,7 +19091,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Quia reiciendis et odio omnis itaque cum." } }, "patroni_port": 8888, @@ -19288,31 +19138,204 @@ "source_node_name": "n1" }, "source_node": "n1" - } - ], - "orchestrator_opts": { - "swarm": { - "extra_labels": { - "traefik.enable": "true", - "traefik.tcp.routers.mydb.rule": "HostSNI(`mydb.example.com`)" - }, - "extra_networks": [ - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" + }, + { + "backup_config": { + "repositories": [ + { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", + "storage-upload-chunk-size": "5MiB" + }, + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "retention_full": 2, + "retention_full_type": "count", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" }, - "id": "traefik-public" - }, - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { + { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", + "storage-upload-chunk-size": "5MiB" + }, + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "retention_full": 2, + "retention_full_type": "count", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + } + ], + "schedules": [ + { + "cron_expression": "0 6 * * ?", + "id": "daily-full-backup", + "type": "full" + }, + { + "cron_expression": "0 6 * * ?", + "id": "daily-full-backup", + "type": "full" + }, + { + "cron_expression": "0 6 * * ?", + "id": "daily-full-backup", + "type": "full" + } + ] + }, + "cpus": "500m", + "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696" + ], + "memory": "500M", + "name": "n1", + "orchestrator_opts": { + "swarm": { + "extra_labels": { + "traefik.enable": "true", + "traefik.tcp.routers.mydb.rule": "HostSNI(`mydb.example.com`)" + }, + "extra_networks": [ + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + }, + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + }, + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + } + ], + "extra_volumes": [ + { + "destination_path": "/backups/container", + "host_path": "/Users/user/backups/host" + }, + { + "destination_path": "/backups/container", + "host_path": "/Users/user/backups/host" + }, + { + "destination_path": "/backups/container", + "host_path": "/Users/user/backups/host" + } + ], + "image": "Quia reiciendis et odio omnis itaque cum." + } + }, + "patroni_port": 8888, + "pg_hba_conf": [ + "host example myapp_user 10.0.0.0/8 scram-sha-256" + ], + "pg_ident_conf": [ + "ssl_users CN=alice,O=example alice" + ], + "port": 5432, + "postgres_version": "17.6", + "postgresql_conf": { + "max_connections": 1000 + }, + "restore_config": { + "repository": { + "azure_account": "pgedge-backups", + "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "azure_endpoint": "blob.core.usgovcloudapi.net", + "azure_key": "YXpLZXk=", + "base_path": "/backups", + "custom_options": { + "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "gcs_endpoint": "localhost", + "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", + "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", + "s3_endpoint": "s3.us-east-1.amazonaws.com", + "s3_key": "AKIAIOSFODNN7EXAMPLE", + "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3_region": "us-east-1", + "type": "s3" + }, + "restore_options": { + "set": "20250505-153628F", + "target": "123456", + "type": "xid" + }, + "source_database_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "source_database_name": "northwind", + "source_node_name": "n1" + }, + "source_node": "n1" + } + ], + "orchestrator_opts": { + "swarm": { + "extra_labels": { + "traefik.enable": "true", + "traefik.tcp.routers.mydb.rule": "HostSNI(`mydb.example.com`)" + }, + "extra_networks": [ + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + }, + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { "com.docker.network.endpoint.expose": "true" }, "id": "traefik-public" @@ -19341,7 +19364,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Quia reiciendis et odio omnis itaque cum." } }, "patroni_port": 8888, @@ -19416,6 +19440,7 @@ "target_session_attrs": "primary" }, "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], "memory": "512M", @@ -19470,7 +19495,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Quia reiciendis et odio omnis itaque cum." } }, "port": 0, @@ -19494,6 +19520,7 @@ "target_session_attrs": "primary" }, "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], "memory": "512M", @@ -19548,7 +19575,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Quia reiciendis et odio omnis itaque cum." } }, "port": 0, @@ -19596,7 +19624,7 @@ "CREATEDB", "CREATEROLE" ], - "db_owner": false, + "db_owner": true, "password": "secret", "roles": [ "pgedge_superuser" @@ -19609,7 +19637,7 @@ "CREATEDB", "CREATEROLE" ], - "db_owner": false, + "db_owner": true, "password": "secret", "roles": [ "pgedge_superuser" @@ -19622,7 +19650,7 @@ "CREATEDB", "CREATEROLE" ], - "db_owner": false, + "db_owner": true, "password": "secret", "roles": [ "pgedge_superuser" @@ -19794,7 +19822,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "patroni_port": 8888, @@ -19860,7 +19889,7 @@ "type": "array", "items": { "type": "string", - "example": "Nisi eveniet sit dignissimos ducimus." + "example": "Quas iste dicta assumenda." }, "description": "Additional pg_hba.conf entries, one rule per array element. Inserted between control-plane's system-user rules and its catch-all, so they cannot affect control-plane-internal connectivity (Patroni, replication, health checks). Node-level pg_hba_conf entries are prepended to these.", "example": [ @@ -19872,7 +19901,7 @@ "type": "array", "items": { "type": "string", - "example": "Asperiores explicabo." + "example": "Vero dolorem aut." }, "description": "Additional pg_ident.conf entries, one mapping per array element. Purely additive; control-plane writes no pg_ident entries of its own. The primary use case is cert auth with map= translating certificate CNs to PostgreSQL usernames.", "example": [ @@ -19931,6 +19960,7 @@ "target_session_attrs": "primary" }, "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], @@ -19986,7 +20016,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "port": 0, @@ -20010,6 +20041,7 @@ "target_session_attrs": "primary" }, "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], @@ -20065,7 +20097,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "port": 0, @@ -20089,6 +20122,7 @@ "target_session_attrs": "primary" }, "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], @@ -20144,7 +20178,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "port": 0, @@ -20168,6 +20203,7 @@ "target_session_attrs": "primary" }, "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], @@ -20223,7 +20259,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "port": 0, @@ -20340,7 +20377,7 @@ "CREATEDB", "CREATEROLE" ], - "db_owner": false, + "db_owner": true, "password": "secret", "roles": [ "pgedge_superuser" @@ -20353,7 +20390,7 @@ "CREATEDB", "CREATEROLE" ], - "db_owner": false, + "db_owner": true, "password": "secret", "roles": [ "pgedge_superuser" @@ -20366,7 +20403,7 @@ "CREATEDB", "CREATEROLE" ], - "db_owner": false, + "db_owner": true, "password": "secret", "roles": [ "pgedge_superuser" @@ -20525,7 +20562,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "patroni_port": 8888, @@ -20721,7 +20759,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "patroni_port": 8888, @@ -20820,7 +20859,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "patroni_port": 8888, @@ -20895,6 +20935,7 @@ "target_session_attrs": "primary" }, "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], @@ -20950,7 +20991,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "port": 0, @@ -20974,6 +21016,7 @@ "target_session_attrs": "primary" }, "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], @@ -21029,7 +21072,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "port": 0, @@ -21053,6 +21097,7 @@ "target_session_attrs": "primary" }, "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], @@ -21108,55 +21153,137 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "port": 0, "service_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", "service_type": "rag", "version": "latest" - } - ], - "spock_version": "5" - }, - "required": [ - "database_name", - "nodes" - ] - }, - "DatabaseSpec7": { - "type": "object", - "properties": { - "backup_config": { - "$ref": "#/components/schemas/BackupConfigSpec" - }, - "cpus": { - "type": "string", - "description": "The number of CPUs to allocate for the database and to use for tuning Postgres. Defaults to the number of available CPUs on the host. Can include an SI suffix, e.g. '500m' for 500 millicpus. Whether this limit is enforced depends on the orchestrator.", - "example": "500m", - "pattern": "^[0-9]+(\\.[0-9]{1,3}|m)?$" - }, - "database_name": { - "type": "string", - "description": "The name of the Postgres database.", - "example": "northwind", - "minLength": 1, - "maxLength": 31 - }, - "database_users": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DatabaseUserSpec" }, - "description": "The users to create for this database.", - "example": [ - { - "attributes": [ - "LOGIN", + { + "config": { + "llm_model": "gpt-4", + "llm_provider": "openai", + "openai_api_key": "sk-..." + }, + "connect_as": "app", + "cpus": "500m", + "database_connection": { + "target_nodes": [ + "n1", + "n2" + ], + "target_session_attrs": "primary" + }, + "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", + "76f9b8c0-4958-11f0-a489-3bb29577c696", + "76f9b8c0-4958-11f0-a489-3bb29577c696" + ], + "memory": "512M", + "orchestrator_opts": { + "swarm": { + "extra_labels": { + "traefik.enable": "true", + "traefik.tcp.routers.mydb.rule": "HostSNI(`mydb.example.com`)" + }, + "extra_networks": [ + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + }, + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + }, + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + } + ], + "extra_volumes": [ + { + "destination_path": "/backups/container", + "host_path": "/Users/user/backups/host" + }, + { + "destination_path": "/backups/container", + "host_path": "/Users/user/backups/host" + }, + { + "destination_path": "/backups/container", + "host_path": "/Users/user/backups/host" + } + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." + } + }, + "port": 0, + "service_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "service_type": "rag", + "version": "latest" + } + ], + "spock_version": "5" + }, + "required": [ + "database_name", + "nodes" + ] + }, + "DatabaseSpec7": { + "type": "object", + "properties": { + "backup_config": { + "$ref": "#/components/schemas/BackupConfigSpec" + }, + "cpus": { + "type": "string", + "description": "The number of CPUs to allocate for the database and to use for tuning Postgres. Defaults to the number of available CPUs on the host. Can include an SI suffix, e.g. '500m' for 500 millicpus. Whether this limit is enforced depends on the orchestrator.", + "example": "500m", + "pattern": "^[0-9]+(\\.[0-9]{1,3}|m)?$" + }, + "database_name": { + "type": "string", + "description": "The name of the Postgres database.", + "example": "northwind", + "minLength": 1, + "maxLength": 31 + }, + "database_users": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DatabaseUserSpec" + }, + "description": "The users to create for this database.", + "example": [ + { + "attributes": [ + "LOGIN", "CREATEDB", "CREATEROLE" ], - "db_owner": false, + "db_owner": true, "password": "secret", "roles": [ "pgedge_superuser" @@ -21169,7 +21296,7 @@ "CREATEDB", "CREATEROLE" ], - "db_owner": false, + "db_owner": true, "password": "secret", "roles": [ "pgedge_superuser" @@ -21182,7 +21309,7 @@ "CREATEDB", "CREATEROLE" ], - "db_owner": false, + "db_owner": true, "password": "secret", "roles": [ "pgedge_superuser" @@ -21354,7 +21481,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "patroni_port": 8888, @@ -21550,7 +21678,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "patroni_port": 8888, @@ -21596,105 +21725,183 @@ "source_node_name": "n1" }, "source_node": "n1" - }, + } + ], + "minItems": 1, + "maxItems": 9 + }, + "orchestrator_opts": { + "$ref": "#/components/schemas/OrchestratorOpts" + }, + "patroni_port": { + "type": "integer", + "description": "The port used by Patroni for this database. If the port is 0, each instance will be assigned a random port. NOTE: This field is not currently supported for Docker Swarm.", + "example": 8888, + "format": "int64", + "minimum": 0, + "maximum": 65535 + }, + "pg_hba_conf": { + "type": "array", + "items": { + "type": "string", + "example": "Laudantium sed delectus vel ut." + }, + "description": "Additional pg_hba.conf entries, one rule per array element. Inserted between control-plane's system-user rules and its catch-all, so they cannot affect control-plane-internal connectivity (Patroni, replication, health checks). Node-level pg_hba_conf entries are prepended to these.", + "example": [ + "hostssl all myapp_user 203.0.113.0/24 scram-sha-256", + "hostssl all alice 0.0.0.0/0 cert clientcert=verify-full map=ssl_users" + ] + }, + "pg_ident_conf": { + "type": "array", + "items": { + "type": "string", + "example": "Expedita maiores cumque esse." + }, + "description": "Additional pg_ident.conf entries, one mapping per array element. Purely additive; control-plane writes no pg_ident entries of its own. The primary use case is cert auth with map= translating certificate CNs to PostgreSQL usernames.", + "example": [ + "ssl_users CN=alice,O=example alice" + ] + }, + "port": { + "type": "integer", + "description": "The port used by the Postgres database. If the port is 0, each instance will be assigned a random port. If the port is unspecified, the database will not be exposed on any port, dependent on orchestrator support for that feature.", + "example": 5432, + "format": "int64", + "minimum": 0, + "maximum": 65535 + }, + "postgres_version": { + "type": "string", + "description": "The Postgres version in 'major.minor' format.", + "example": "17.6", + "pattern": "^\\d{2}\\.\\d{1,2}$" + }, + "postgresql_conf": { + "type": "object", + "description": "Additional postgresql.conf settings. Will be merged with the settings provided by control-plane.", + "example": { + "max_connections": 1000 + }, + "maxLength": 64, + "additionalProperties": true + }, + "restore_config": { + "$ref": "#/components/schemas/RestoreConfigSpec" + }, + "scripts": { + "$ref": "#/components/schemas/DatabaseScripts" + }, + "services": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ServiceSpec7" + }, + "description": "Service instances to run alongside the database (e.g., MCP servers).", + "example": [ { - "backup_config": { - "repositories": [ - { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", - "storage-upload-chunk-size": "5MiB" - }, - "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "gcs_endpoint": "localhost", - "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", - "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "retention_full": 2, - "retention_full_type": "count", - "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "s3_endpoint": "s3.us-east-1.amazonaws.com", - "s3_key": "AKIAIOSFODNN7EXAMPLE", - "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "s3_region": "us-east-1", - "type": "s3" + "config": { + "llm_model": "gpt-4", + "llm_provider": "openai", + "openai_api_key": "sk-..." + }, + "connect_as": "app", + "cpus": "500m", + "database_connection": { + "target_nodes": [ + "n1", + "n2" + ], + "target_session_attrs": "primary" + }, + "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", + "76f9b8c0-4958-11f0-a489-3bb29577c696", + "76f9b8c0-4958-11f0-a489-3bb29577c696" + ], + "memory": "512M", + "orchestrator_opts": { + "swarm": { + "extra_labels": { + "traefik.enable": "true", + "traefik.tcp.routers.mydb.rule": "HostSNI(`mydb.example.com`)" }, - { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", - "storage-upload-chunk-size": "5MiB" + "extra_networks": [ + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" }, - "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "gcs_endpoint": "localhost", - "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", - "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "retention_full": 2, - "retention_full_type": "count", - "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "s3_endpoint": "s3.us-east-1.amazonaws.com", - "s3_key": "AKIAIOSFODNN7EXAMPLE", - "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "s3_region": "us-east-1", - "type": "s3" - }, - { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", - "storage-upload-chunk-size": "5MiB" + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" }, - "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "gcs_endpoint": "localhost", - "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", - "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "retention_full": 2, - "retention_full_type": "count", - "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "s3_endpoint": "s3.us-east-1.amazonaws.com", - "s3_key": "AKIAIOSFODNN7EXAMPLE", - "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "s3_region": "us-east-1", - "type": "s3" - } - ], - "schedules": [ - { - "cron_expression": "0 6 * * ?", - "id": "daily-full-backup", - "type": "full" - }, - { - "cron_expression": "0 6 * * ?", - "id": "daily-full-backup", - "type": "full" - }, - { - "cron_expression": "0 6 * * ?", - "id": "daily-full-backup", - "type": "full" - } - ] + { + "aliases": [ + "pg-db", + "db-alias" + ], + "driver_opts": { + "com.docker.network.endpoint.expose": "true" + }, + "id": "traefik-public" + } + ], + "extra_volumes": [ + { + "destination_path": "/backups/container", + "host_path": "/Users/user/backups/host" + }, + { + "destination_path": "/backups/container", + "host_path": "/Users/user/backups/host" + }, + { + "destination_path": "/backups/container", + "host_path": "/Users/user/backups/host" + } + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." + } + }, + "port": 0, + "service_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "service_type": "rag", + "version": "latest" + }, + { + "config": { + "llm_model": "gpt-4", + "llm_provider": "openai", + "openai_api_key": "sk-..." }, + "connect_as": "app", "cpus": "500m", + "database_connection": { + "target_nodes": [ + "n1", + "n2" + ], + "target_session_attrs": "primary" + }, "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], - "memory": "500M", - "name": "n1", + "memory": "512M", "orchestrator_opts": { "swarm": { "extra_labels": { @@ -21746,127 +21953,15 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, - "patroni_port": 8888, - "pg_hba_conf": [ - "host example myapp_user 10.0.0.0/8 scram-sha-256" - ], - "pg_ident_conf": [ - "ssl_users CN=alice,O=example alice" - ], - "port": 5432, - "postgres_version": "17.6", - "postgresql_conf": { - "max_connections": 1000 - }, - "restore_config": { - "repository": { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab" - }, - "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "gcs_endpoint": "localhost", - "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", - "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "s3_endpoint": "s3.us-east-1.amazonaws.com", - "s3_key": "AKIAIOSFODNN7EXAMPLE", - "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "s3_region": "us-east-1", - "type": "s3" - }, - "restore_options": { - "set": "20250505-153628F", - "target": "123456", - "type": "xid" - }, - "source_database_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "source_database_name": "northwind", - "source_node_name": "n1" - }, - "source_node": "n1" - } - ], - "minItems": 1, - "maxItems": 9 - }, - "orchestrator_opts": { - "$ref": "#/components/schemas/OrchestratorOpts" - }, - "patroni_port": { - "type": "integer", - "description": "The port used by Patroni for this database. If the port is 0, each instance will be assigned a random port. NOTE: This field is not currently supported for Docker Swarm.", - "example": 8888, - "format": "int64", - "minimum": 0, - "maximum": 65535 - }, - "pg_hba_conf": { - "type": "array", - "items": { - "type": "string", - "example": "Et vero dolorem aut." - }, - "description": "Additional pg_hba.conf entries, one rule per array element. Inserted between control-plane's system-user rules and its catch-all, so they cannot affect control-plane-internal connectivity (Patroni, replication, health checks). Node-level pg_hba_conf entries are prepended to these.", - "example": [ - "hostssl all myapp_user 203.0.113.0/24 scram-sha-256", - "hostssl all alice 0.0.0.0/0 cert clientcert=verify-full map=ssl_users" - ] - }, - "pg_ident_conf": { - "type": "array", - "items": { - "type": "string", - "example": "Omnis quisquam officiis." - }, - "description": "Additional pg_ident.conf entries, one mapping per array element. Purely additive; control-plane writes no pg_ident entries of its own. The primary use case is cert auth with map= translating certificate CNs to PostgreSQL usernames.", - "example": [ - "ssl_users CN=alice,O=example alice" - ] - }, - "port": { - "type": "integer", - "description": "The port used by the Postgres database. If the port is 0, each instance will be assigned a random port. If the port is unspecified, the database will not be exposed on any port, dependent on orchestrator support for that feature.", - "example": 5432, - "format": "int64", - "minimum": 0, - "maximum": 65535 - }, - "postgres_version": { - "type": "string", - "description": "The Postgres version in 'major.minor' format.", - "example": "17.6", - "pattern": "^\\d{2}\\.\\d{1,2}$" - }, - "postgresql_conf": { - "type": "object", - "description": "Additional postgresql.conf settings. Will be merged with the settings provided by control-plane.", - "example": { - "max_connections": 1000 - }, - "maxLength": 64, - "additionalProperties": true - }, - "restore_config": { - "$ref": "#/components/schemas/RestoreConfigSpec" - }, - "scripts": { - "$ref": "#/components/schemas/DatabaseScripts" - }, - "services": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ServiceSpec7" - }, - "description": "Service instances to run alongside the database (e.g., MCP servers).", - "example": [ + "port": 0, + "service_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", + "service_type": "rag", + "version": "latest" + }, { "config": { "llm_model": "gpt-4", @@ -21883,6 +21978,7 @@ "target_session_attrs": "primary" }, "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], @@ -21938,7 +22034,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "port": 0, @@ -21962,6 +22059,7 @@ "target_session_attrs": "primary" }, "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], @@ -22017,7 +22115,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "port": 0, @@ -22110,458 +22209,66 @@ "schedules": [ { "cron_expression": "0 6 * * ?", - "id": "daily-full-backup", - "type": "full" - }, - { - "cron_expression": "0 6 * * ?", - "id": "daily-full-backup", - "type": "full" - }, - { - "cron_expression": "0 6 * * ?", - "id": "daily-full-backup", - "type": "full" - } - ] - }, - "cpus": "500m", - "database_name": "northwind", - "database_users": [ - { - "attributes": [ - "LOGIN", - "CREATEDB", - "CREATEROLE" - ], - "db_owner": false, - "password": "secret", - "roles": [ - "pgedge_superuser" - ], - "username": "admin" - }, - { - "attributes": [ - "LOGIN", - "CREATEDB", - "CREATEROLE" - ], - "db_owner": false, - "password": "secret", - "roles": [ - "pgedge_superuser" - ], - "username": "admin" - }, - { - "attributes": [ - "LOGIN", - "CREATEDB", - "CREATEROLE" - ], - "db_owner": false, - "password": "secret", - "roles": [ - "pgedge_superuser" - ], - "username": "admin" - } - ], - "memory": "500M", - "nodes": [ - { - "backup_config": { - "repositories": [ - { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", - "storage-upload-chunk-size": "5MiB" - }, - "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "gcs_endpoint": "localhost", - "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", - "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "retention_full": 2, - "retention_full_type": "count", - "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "s3_endpoint": "s3.us-east-1.amazonaws.com", - "s3_key": "AKIAIOSFODNN7EXAMPLE", - "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "s3_region": "us-east-1", - "type": "s3" - }, - { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", - "storage-upload-chunk-size": "5MiB" - }, - "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "gcs_endpoint": "localhost", - "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", - "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "retention_full": 2, - "retention_full_type": "count", - "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "s3_endpoint": "s3.us-east-1.amazonaws.com", - "s3_key": "AKIAIOSFODNN7EXAMPLE", - "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "s3_region": "us-east-1", - "type": "s3" - }, - { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", - "storage-upload-chunk-size": "5MiB" - }, - "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "gcs_endpoint": "localhost", - "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", - "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "retention_full": 2, - "retention_full_type": "count", - "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "s3_endpoint": "s3.us-east-1.amazonaws.com", - "s3_key": "AKIAIOSFODNN7EXAMPLE", - "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "s3_region": "us-east-1", - "type": "s3" - } - ], - "schedules": [ - { - "cron_expression": "0 6 * * ?", - "id": "daily-full-backup", - "type": "full" - }, - { - "cron_expression": "0 6 * * ?", - "id": "daily-full-backup", - "type": "full" - }, - { - "cron_expression": "0 6 * * ?", - "id": "daily-full-backup", - "type": "full" - } - ] - }, - "cpus": "500m", - "host_ids": [ - "76f9b8c0-4958-11f0-a489-3bb29577c696", - "76f9b8c0-4958-11f0-a489-3bb29577c696" - ], - "memory": "500M", - "name": "n1", - "orchestrator_opts": { - "swarm": { - "extra_labels": { - "traefik.enable": "true", - "traefik.tcp.routers.mydb.rule": "HostSNI(`mydb.example.com`)" - }, - "extra_networks": [ - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" - }, - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" - }, - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" - } - ], - "extra_volumes": [ - { - "destination_path": "/backups/container", - "host_path": "/Users/user/backups/host" - }, - { - "destination_path": "/backups/container", - "host_path": "/Users/user/backups/host" - }, - { - "destination_path": "/backups/container", - "host_path": "/Users/user/backups/host" - } - ] - } - }, - "patroni_port": 8888, - "pg_hba_conf": [ - "host example myapp_user 10.0.0.0/8 scram-sha-256" - ], - "pg_ident_conf": [ - "ssl_users CN=alice,O=example alice" - ], - "port": 5432, - "postgres_version": "17.6", - "postgresql_conf": { - "max_connections": 1000 - }, - "restore_config": { - "repository": { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab" - }, - "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "gcs_endpoint": "localhost", - "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", - "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "s3_endpoint": "s3.us-east-1.amazonaws.com", - "s3_key": "AKIAIOSFODNN7EXAMPLE", - "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "s3_region": "us-east-1", - "type": "s3" - }, - "restore_options": { - "set": "20250505-153628F", - "target": "123456", - "type": "xid" - }, - "source_database_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "source_database_name": "northwind", - "source_node_name": "n1" - }, - "source_node": "n1" - }, - { - "backup_config": { - "repositories": [ - { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", - "storage-upload-chunk-size": "5MiB" - }, - "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "gcs_endpoint": "localhost", - "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", - "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "retention_full": 2, - "retention_full_type": "count", - "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "s3_endpoint": "s3.us-east-1.amazonaws.com", - "s3_key": "AKIAIOSFODNN7EXAMPLE", - "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "s3_region": "us-east-1", - "type": "s3" - }, - { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", - "storage-upload-chunk-size": "5MiB" - }, - "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "gcs_endpoint": "localhost", - "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", - "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "retention_full": 2, - "retention_full_type": "count", - "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "s3_endpoint": "s3.us-east-1.amazonaws.com", - "s3_key": "AKIAIOSFODNN7EXAMPLE", - "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "s3_region": "us-east-1", - "type": "s3" - }, - { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab", - "storage-upload-chunk-size": "5MiB" - }, - "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "gcs_endpoint": "localhost", - "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", - "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "retention_full": 2, - "retention_full_type": "count", - "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "s3_endpoint": "s3.us-east-1.amazonaws.com", - "s3_key": "AKIAIOSFODNN7EXAMPLE", - "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "s3_region": "us-east-1", - "type": "s3" - } - ], - "schedules": [ - { - "cron_expression": "0 6 * * ?", - "id": "daily-full-backup", - "type": "full" - }, - { - "cron_expression": "0 6 * * ?", - "id": "daily-full-backup", - "type": "full" - }, - { - "cron_expression": "0 6 * * ?", - "id": "daily-full-backup", - "type": "full" - } - ] - }, - "cpus": "500m", - "host_ids": [ - "76f9b8c0-4958-11f0-a489-3bb29577c696", - "76f9b8c0-4958-11f0-a489-3bb29577c696" - ], - "memory": "500M", - "name": "n1", - "orchestrator_opts": { - "swarm": { - "extra_labels": { - "traefik.enable": "true", - "traefik.tcp.routers.mydb.rule": "HostSNI(`mydb.example.com`)" - }, - "extra_networks": [ - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" - }, - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" - }, - { - "aliases": [ - "pg-db", - "db-alias" - ], - "driver_opts": { - "com.docker.network.endpoint.expose": "true" - }, - "id": "traefik-public" - } - ], - "extra_volumes": [ - { - "destination_path": "/backups/container", - "host_path": "/Users/user/backups/host" - }, - { - "destination_path": "/backups/container", - "host_path": "/Users/user/backups/host" - }, - { - "destination_path": "/backups/container", - "host_path": "/Users/user/backups/host" - } - ] - } + "id": "daily-full-backup", + "type": "full" }, - "patroni_port": 8888, - "pg_hba_conf": [ - "host example myapp_user 10.0.0.0/8 scram-sha-256" + { + "cron_expression": "0 6 * * ?", + "id": "daily-full-backup", + "type": "full" + }, + { + "cron_expression": "0 6 * * ?", + "id": "daily-full-backup", + "type": "full" + } + ] + }, + "cpus": "500m", + "database_name": "northwind", + "database_users": [ + { + "attributes": [ + "LOGIN", + "CREATEDB", + "CREATEROLE" ], - "pg_ident_conf": [ - "ssl_users CN=alice,O=example alice" + "db_owner": true, + "password": "secret", + "roles": [ + "pgedge_superuser" ], - "port": 5432, - "postgres_version": "17.6", - "postgresql_conf": { - "max_connections": 1000 - }, - "restore_config": { - "repository": { - "azure_account": "pgedge-backups", - "azure_container": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "azure_endpoint": "blob.core.usgovcloudapi.net", - "azure_key": "YXpLZXk=", - "base_path": "/backups", - "custom_options": { - "s3-kms-key-id": "1234abcd-12ab-34cd-56ef-1234567890ab" - }, - "gcs_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "gcs_endpoint": "localhost", - "gcs_key": "ZXhhbXBsZSBnY3Mga2V5Cg==", - "id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "s3_bucket": "pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1", - "s3_endpoint": "s3.us-east-1.amazonaws.com", - "s3_key": "AKIAIOSFODNN7EXAMPLE", - "s3_key_secret": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", - "s3_region": "us-east-1", - "type": "s3" - }, - "restore_options": { - "set": "20250505-153628F", - "target": "123456", - "type": "xid" - }, - "source_database_id": "76f9b8c0-4958-11f0-a489-3bb29577c696", - "source_database_name": "northwind", - "source_node_name": "n1" - }, - "source_node": "n1" + "username": "admin" + }, + { + "attributes": [ + "LOGIN", + "CREATEDB", + "CREATEROLE" + ], + "db_owner": true, + "password": "secret", + "roles": [ + "pgedge_superuser" + ], + "username": "admin" }, + { + "attributes": [ + "LOGIN", + "CREATEDB", + "CREATEROLE" + ], + "db_owner": true, + "password": "secret", + "roles": [ + "pgedge_superuser" + ], + "username": "admin" + } + ], + "memory": "500M", + "nodes": [ { "backup_config": { "repositories": [ @@ -22711,7 +22418,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "patroni_port": 8888, @@ -22810,7 +22518,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "patroni_port": 8888, @@ -22885,6 +22594,7 @@ "target_session_attrs": "primary" }, "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], @@ -22940,7 +22650,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "port": 0, @@ -22964,6 +22675,7 @@ "target_session_attrs": "primary" }, "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], @@ -23019,7 +22731,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "port": 0, @@ -23066,97 +22779,7 @@ ], "port": 5432 }, - "created_at": "2001-11-21T07:07:15Z", - "error": "failed to get patroni status: connection refused", - "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", - "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", - "node_name": "n1", - "postgres": { - "patroni_paused": true, - "patroni_state": "unknown", - "pending_restart": false, - "role": "primary", - "version": "18.1" - }, - "spock": { - "read_only": "off", - "subscriptions": [ - { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" - }, - { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" - }, - { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" - } - ], - "version": "4.10.0" - }, - "state": "degraded", - "status_updated_at": "1990-07-23T01:22:30Z", - "updated_at": "2013-01-29T23:51:44Z" - }, - { - "connection_info": { - "addresses": [ - "10.24.34.2", - "i-0123456789abcdef.ec2.internal" - ], - "port": 5432 - }, - "created_at": "2001-11-21T07:07:15Z", - "error": "failed to get patroni status: connection refused", - "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", - "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", - "node_name": "n1", - "postgres": { - "patroni_paused": true, - "patroni_state": "unknown", - "pending_restart": false, - "role": "primary", - "version": "18.1" - }, - "spock": { - "read_only": "off", - "subscriptions": [ - { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" - }, - { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" - }, - { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" - } - ], - "version": "4.10.0" - }, - "state": "degraded", - "status_updated_at": "1990-07-23T01:22:30Z", - "updated_at": "2013-01-29T23:51:44Z" - }, - { - "connection_info": { - "addresses": [ - "10.24.34.2", - "i-0123456789abcdef.ec2.internal" - ], - "port": 5432 - }, - "created_at": "2001-11-21T07:07:15Z", + "created_at": "1984-01-30T10:40:13Z", "error": "failed to get patroni status: connection refused", "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", @@ -23164,7 +22787,7 @@ "postgres": { "patroni_paused": true, "patroni_state": "unknown", - "pending_restart": false, + "pending_restart": true, "role": "primary", "version": "18.1" }, @@ -23189,9 +22812,9 @@ ], "version": "4.10.0" }, - "state": "degraded", - "status_updated_at": "1990-07-23T01:22:30Z", - "updated_at": "2013-01-29T23:51:44Z" + "state": "modifying", + "status_updated_at": "1976-03-01T20:13:25Z", + "updated_at": "1996-05-27T17:04:41Z" }, { "connection_info": { @@ -23201,7 +22824,7 @@ ], "port": 5432 }, - "created_at": "2001-11-21T07:07:15Z", + "created_at": "1984-01-30T10:40:13Z", "error": "failed to get patroni status: connection refused", "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", @@ -23209,7 +22832,7 @@ "postgres": { "patroni_paused": true, "patroni_state": "unknown", - "pending_restart": false, + "pending_restart": true, "role": "primary", "version": "18.1" }, @@ -23234,16 +22857,16 @@ ], "version": "4.10.0" }, - "state": "degraded", - "status_updated_at": "1990-07-23T01:22:30Z", - "updated_at": "2013-01-29T23:51:44Z" + "state": "modifying", + "status_updated_at": "1976-03-01T20:13:25Z", + "updated_at": "1996-05-27T17:04:41Z" } ] }, "state": { "type": "string", "description": "Current state of the database.", - "example": "degraded", + "example": "creating", "enum": [ "creating", "modifying", @@ -23282,7 +22905,97 @@ ], "port": 5432 }, - "created_at": "2001-11-21T07:07:15Z", + "created_at": "1984-01-30T10:40:13Z", + "error": "failed to get patroni status: connection refused", + "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", + "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", + "node_name": "n1", + "postgres": { + "patroni_paused": true, + "patroni_state": "unknown", + "pending_restart": true, + "role": "primary", + "version": "18.1" + }, + "spock": { + "read_only": "off", + "subscriptions": [ + { + "name": "sub_n1n2", + "provider_node": "n2", + "status": "down" + }, + { + "name": "sub_n1n2", + "provider_node": "n2", + "status": "down" + }, + { + "name": "sub_n1n2", + "provider_node": "n2", + "status": "down" + } + ], + "version": "4.10.0" + }, + "state": "modifying", + "status_updated_at": "1976-03-01T20:13:25Z", + "updated_at": "1996-05-27T17:04:41Z" + }, + { + "connection_info": { + "addresses": [ + "10.24.34.2", + "i-0123456789abcdef.ec2.internal" + ], + "port": 5432 + }, + "created_at": "1984-01-30T10:40:13Z", + "error": "failed to get patroni status: connection refused", + "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", + "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", + "node_name": "n1", + "postgres": { + "patroni_paused": true, + "patroni_state": "unknown", + "pending_restart": true, + "role": "primary", + "version": "18.1" + }, + "spock": { + "read_only": "off", + "subscriptions": [ + { + "name": "sub_n1n2", + "provider_node": "n2", + "status": "down" + }, + { + "name": "sub_n1n2", + "provider_node": "n2", + "status": "down" + }, + { + "name": "sub_n1n2", + "provider_node": "n2", + "status": "down" + } + ], + "version": "4.10.0" + }, + "state": "modifying", + "status_updated_at": "1976-03-01T20:13:25Z", + "updated_at": "1996-05-27T17:04:41Z" + }, + { + "connection_info": { + "addresses": [ + "10.24.34.2", + "i-0123456789abcdef.ec2.internal" + ], + "port": 5432 + }, + "created_at": "1984-01-30T10:40:13Z", "error": "failed to get patroni status: connection refused", "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", @@ -23290,7 +23003,7 @@ "postgres": { "patroni_paused": true, "patroni_state": "unknown", - "pending_restart": false, + "pending_restart": true, "role": "primary", "version": "18.1" }, @@ -23315,9 +23028,9 @@ ], "version": "4.10.0" }, - "state": "degraded", - "status_updated_at": "1990-07-23T01:22:30Z", - "updated_at": "2013-01-29T23:51:44Z" + "state": "modifying", + "status_updated_at": "1976-03-01T20:13:25Z", + "updated_at": "1996-05-27T17:04:41Z" }, { "connection_info": { @@ -23327,7 +23040,7 @@ ], "port": 5432 }, - "created_at": "2001-11-21T07:07:15Z", + "created_at": "1984-01-30T10:40:13Z", "error": "failed to get patroni status: connection refused", "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", @@ -23335,7 +23048,7 @@ "postgres": { "patroni_paused": true, "patroni_state": "unknown", - "pending_restart": false, + "pending_restart": true, "role": "primary", "version": "18.1" }, @@ -23360,12 +23073,12 @@ ], "version": "4.10.0" }, - "state": "degraded", - "status_updated_at": "1990-07-23T01:22:30Z", - "updated_at": "2013-01-29T23:51:44Z" + "state": "modifying", + "status_updated_at": "1976-03-01T20:13:25Z", + "updated_at": "1996-05-27T17:04:41Z" } ], - "state": "failed", + "state": "restoring", "tenant_id": "8210ec10-2dca-406c-ac4a-0661d2189954", "updated_at": "2025-01-01T02:30:00Z" }, @@ -23383,7 +23096,7 @@ "type": "array", "items": { "type": "string", - "example": "Aut omnis magnam aspernatur occaecati itaque dolores." + "example": "Autem eum et et eius at praesentium." }, "description": "The attributes to assign to this database user.", "example": [ @@ -23396,7 +23109,7 @@ "db_owner": { "type": "boolean", "description": "If true, this user will be granted database ownership.", - "example": true + "example": false }, "password": { "type": "string", @@ -23408,7 +23121,7 @@ "type": "array", "items": { "type": "string", - "example": "Dolor autem eum." + "example": "Dolorem sapiente placeat illo dolore totam accusamus." }, "description": "The roles to assign to this database user.", "example": [ @@ -23429,7 +23142,7 @@ "CREATEDB", "CREATEROLE" ], - "db_owner": true, + "db_owner": false, "password": "secret", "roles": [ "pgedge_superuser" @@ -23467,7 +23180,7 @@ "type": "array", "items": { "type": "string", - "example": "Rerum animi et itaque placeat placeat." + "example": "Voluptates maxime hic aut omnis magnam." }, "description": "The Etcd client endpoint for this cluster member.", "example": [ @@ -23483,7 +23196,7 @@ "type": "array", "items": { "type": "string", - "example": "Repudiandae ab sed." + "example": "A enim." }, "description": "The Etcd peer endpoint for this cluster member.", "example": [ @@ -23513,7 +23226,7 @@ "type": "array", "items": { "type": "string", - "example": "Aliquid cupiditate sapiente eos aut dignissimos cum." + "example": "Quia non atque facilis non modi." }, "description": "Optional network-scoped aliases for the container.", "example": [ @@ -23530,7 +23243,7 @@ }, "additionalProperties": { "type": "string", - "example": "Modi consequatur non at." + "example": "Illum alias qui et." } }, "id": { @@ -23612,7 +23325,7 @@ "candidate_instance_id": "68f50878-44d2-4524-a823-e31bd478706d-n1-689qacsi", "database_id": "my-app", "node_name": "n1", - "skip_validation": true + "skip_validation": false }, "required": [ "database_id", @@ -23636,7 +23349,7 @@ }, "example": { "candidate_instance_id": "68f50878-44d2-4524-a823-e31bd478706d-n1-689qacsi", - "skip_validation": false + "skip_validation": true } }, "FailoverDatabaseNodeResponse": { @@ -23702,7 +23415,7 @@ "type": "array", "items": { "type": "string", - "example": "Illo aut et corporis harum." + "example": "Consequuntur reprehenderit esse id labore." }, "description": "The addresses that this host advertises to client applications.", "example": [ @@ -23757,7 +23470,7 @@ "type": "array", "items": { "type": "string", - "example": "Eos molestiae voluptates laborum." + "example": "Veritatis et omnis non." }, "description": "The addresses that this host advertises to other hosts.", "example": [ @@ -23783,10 +23496,6 @@ "postgres_version": "17.6", "spock_version": "5" }, - { - "postgres_version": "17.6", - "spock_version": "5" - }, { "postgres_version": "17.6", "spock_version": "5" @@ -23843,6 +23552,14 @@ "updated_at": "2021-07-01T12:34:56Z" }, "supported_pgedge_versions": [ + { + "postgres_version": "17.6", + "spock_version": "5" + }, + { + "postgres_version": "17.6", + "spock_version": "5" + }, { "postgres_version": "17.6", "spock_version": "5" @@ -23899,7 +23616,7 @@ "type": "object", "description": "The status of each component of the host.", "example": { - "Sint ea omnis ut.": { + "Harum voluptatum nulla commodi quo.": { "details": { "alarms": [ "3: NOSPACE" @@ -23932,7 +23649,7 @@ }, "example": { "components": { - "Impedit laudantium et quia commodi consequatur.": { + "Eius totam dolorem itaque aut aut.": { "details": { "alarms": [ "3: NOSPACE" @@ -23941,7 +23658,7 @@ "error": "failed to connect to etcd", "healthy": false }, - "Possimus magni quaerat qui quam id.": { + "Nihil facere ad tenetur iure quisquam.": { "details": { "alarms": [ "3: NOSPACE" @@ -23950,7 +23667,7 @@ "error": "failed to connect to etcd", "healthy": false }, - "Velit et labore in dolor quisquam placeat.": { + "Sunt quibusdam quis.": { "details": { "alarms": [ "3: NOSPACE" @@ -23994,7 +23711,7 @@ "created_at": { "type": "string", "description": "The time that the instance was created.", - "example": "1985-10-05T07:39:21Z", + "example": "1994-08-08T11:48:05Z", "format": "date-time" }, "error": { @@ -24041,13 +23758,13 @@ "status_updated_at": { "type": "string", "description": "The time that the instance status information was last updated.", - "example": "1980-07-23T10:57:18Z", + "example": "2006-09-13T00:37:13Z", "format": "date-time" }, "updated_at": { "type": "string", "description": "The time that the instance was last modified.", - "example": "2012-09-29T21:49:40Z", + "example": "1970-10-18T00:04:10Z", "format": "date-time" } }, @@ -24060,7 +23777,7 @@ ], "port": 5432 }, - "created_at": "1978-04-27T14:09:21Z", + "created_at": "1972-11-23T09:23:25Z", "error": "failed to get patroni status: connection refused", "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", @@ -24068,7 +23785,7 @@ "postgres": { "patroni_paused": true, "patroni_state": "unknown", - "pending_restart": false, + "pending_restart": true, "role": "primary", "version": "18.1" }, @@ -24093,9 +23810,9 @@ ], "version": "4.10.0" }, - "state": "degraded", - "status_updated_at": "1976-06-24T23:38:37Z", - "updated_at": "2015-04-11T16:50:06Z" + "state": "creating", + "status_updated_at": "2005-07-17T23:25:59Z", + "updated_at": "1997-05-17T16:59:26Z" }, "required": [ "id", @@ -24113,7 +23830,7 @@ "type": "array", "items": { "type": "string", - "example": "Facere eius totam." + "example": "Eaque eos quos autem perspiciatis." }, "description": "The addresses of the host that's running this instance.", "example": [ @@ -24143,7 +23860,7 @@ "patroni_paused": { "type": "boolean", "description": "True if Patroni is paused for this instance.", - "example": false + "example": true }, "patroni_state": { "type": "string", @@ -24152,7 +23869,7 @@ "pending_restart": { "type": "boolean", "description": "True if this instance has a pending restart from a configuration change.", - "example": true + "example": false }, "role": { "type": "string", @@ -24198,11 +23915,6 @@ "provider_node": "n2", "status": "down" }, - { - "name": "sub_n1n2", - "provider_node": "n2", - "status": "down" - }, { "name": "sub_n1n2", "provider_node": "n2", @@ -24301,16 +24013,6 @@ "task_id": "019783f4-75f4-71e7-85a3-c9b96b345d77", "type": "create" }, - { - "completed_at": "2025-06-18T16:52:35Z", - "created_at": "2025-06-18T16:52:05Z", - "database_id": "storefront", - "entity_id": "storefront", - "scope": "database", - "status": "completed", - "task_id": "019783f4-75f4-71e7-85a3-c9b96b345d77", - "type": "create" - }, { "completed_at": "2025-06-18T16:52:35Z", "created_at": "2025-06-18T16:52:05Z", @@ -24395,7 +24097,7 @@ ], "port": 5432 }, - "created_at": "2001-11-21T07:07:15Z", + "created_at": "1984-01-30T10:40:13Z", "error": "failed to get patroni status: connection refused", "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", @@ -24403,7 +24105,7 @@ "postgres": { "patroni_paused": true, "patroni_state": "unknown", - "pending_restart": false, + "pending_restart": true, "role": "primary", "version": "18.1" }, @@ -24428,9 +24130,9 @@ ], "version": "4.10.0" }, - "state": "degraded", - "status_updated_at": "1990-07-23T01:22:30Z", - "updated_at": "2013-01-29T23:51:44Z" + "state": "modifying", + "status_updated_at": "1976-03-01T20:13:25Z", + "updated_at": "1996-05-27T17:04:41Z" }, { "connection_info": { @@ -24440,7 +24142,7 @@ ], "port": 5432 }, - "created_at": "2001-11-21T07:07:15Z", + "created_at": "1984-01-30T10:40:13Z", "error": "failed to get patroni status: connection refused", "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", @@ -24448,7 +24150,7 @@ "postgres": { "patroni_paused": true, "patroni_state": "unknown", - "pending_restart": false, + "pending_restart": true, "role": "primary", "version": "18.1" }, @@ -24473,9 +24175,9 @@ ], "version": "4.10.0" }, - "state": "degraded", - "status_updated_at": "1990-07-23T01:22:30Z", - "updated_at": "2013-01-29T23:51:44Z" + "state": "modifying", + "status_updated_at": "1976-03-01T20:13:25Z", + "updated_at": "1996-05-27T17:04:41Z" }, { "connection_info": { @@ -24485,7 +24187,7 @@ ], "port": 5432 }, - "created_at": "2001-11-21T07:07:15Z", + "created_at": "1984-01-30T10:40:13Z", "error": "failed to get patroni status: connection refused", "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", @@ -24493,7 +24195,7 @@ "postgres": { "patroni_paused": true, "patroni_state": "unknown", - "pending_restart": false, + "pending_restart": true, "role": "primary", "version": "18.1" }, @@ -24518,10 +24220,19 @@ ], "version": "4.10.0" }, - "state": "degraded", - "status_updated_at": "1990-07-23T01:22:30Z", - "updated_at": "2013-01-29T23:51:44Z" - }, + "state": "modifying", + "status_updated_at": "1976-03-01T20:13:25Z", + "updated_at": "1996-05-27T17:04:41Z" + } + ], + "state": "modifying", + "tenant_id": "8210ec10-2dca-406c-ac4a-0661d2189954", + "updated_at": "2025-01-01T02:30:00Z" + }, + { + "created_at": "2025-01-01T01:30:00Z", + "id": "02f1a7db-fca8-4521-b57a-2a375c1ced51", + "instances": [ { "connection_info": { "addresses": [ @@ -24530,7 +24241,7 @@ ], "port": 5432 }, - "created_at": "2001-11-21T07:07:15Z", + "created_at": "1984-01-30T10:40:13Z", "error": "failed to get patroni status: connection refused", "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", @@ -24538,7 +24249,7 @@ "postgres": { "patroni_paused": true, "patroni_state": "unknown", - "pending_restart": false, + "pending_restart": true, "role": "primary", "version": "18.1" }, @@ -24563,19 +24274,10 @@ ], "version": "4.10.0" }, - "state": "degraded", - "status_updated_at": "1990-07-23T01:22:30Z", - "updated_at": "2013-01-29T23:51:44Z" - } - ], - "state": "failed", - "tenant_id": "8210ec10-2dca-406c-ac4a-0661d2189954", - "updated_at": "2025-01-01T02:30:00Z" - }, - { - "created_at": "2025-01-01T01:30:00Z", - "id": "02f1a7db-fca8-4521-b57a-2a375c1ced51", - "instances": [ + "state": "modifying", + "status_updated_at": "1976-03-01T20:13:25Z", + "updated_at": "1996-05-27T17:04:41Z" + }, { "connection_info": { "addresses": [ @@ -24584,7 +24286,7 @@ ], "port": 5432 }, - "created_at": "2001-11-21T07:07:15Z", + "created_at": "1984-01-30T10:40:13Z", "error": "failed to get patroni status: connection refused", "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", @@ -24592,7 +24294,7 @@ "postgres": { "patroni_paused": true, "patroni_state": "unknown", - "pending_restart": false, + "pending_restart": true, "role": "primary", "version": "18.1" }, @@ -24617,9 +24319,9 @@ ], "version": "4.10.0" }, - "state": "degraded", - "status_updated_at": "1990-07-23T01:22:30Z", - "updated_at": "2013-01-29T23:51:44Z" + "state": "modifying", + "status_updated_at": "1976-03-01T20:13:25Z", + "updated_at": "1996-05-27T17:04:41Z" }, { "connection_info": { @@ -24629,7 +24331,7 @@ ], "port": 5432 }, - "created_at": "2001-11-21T07:07:15Z", + "created_at": "1984-01-30T10:40:13Z", "error": "failed to get patroni status: connection refused", "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", @@ -24637,7 +24339,7 @@ "postgres": { "patroni_paused": true, "patroni_state": "unknown", - "pending_restart": false, + "pending_restart": true, "role": "primary", "version": "18.1" }, @@ -24662,10 +24364,19 @@ ], "version": "4.10.0" }, - "state": "degraded", - "status_updated_at": "1990-07-23T01:22:30Z", - "updated_at": "2013-01-29T23:51:44Z" - }, + "state": "modifying", + "status_updated_at": "1976-03-01T20:13:25Z", + "updated_at": "1996-05-27T17:04:41Z" + } + ], + "state": "modifying", + "tenant_id": "8210ec10-2dca-406c-ac4a-0661d2189954", + "updated_at": "2025-01-01T02:30:00Z" + }, + { + "created_at": "2025-01-01T01:30:00Z", + "id": "02f1a7db-fca8-4521-b57a-2a375c1ced51", + "instances": [ { "connection_info": { "addresses": [ @@ -24674,7 +24385,7 @@ ], "port": 5432 }, - "created_at": "2001-11-21T07:07:15Z", + "created_at": "1984-01-30T10:40:13Z", "error": "failed to get patroni status: connection refused", "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", @@ -24682,7 +24393,7 @@ "postgres": { "patroni_paused": true, "patroni_state": "unknown", - "pending_restart": false, + "pending_restart": true, "role": "primary", "version": "18.1" }, @@ -24707,9 +24418,9 @@ ], "version": "4.10.0" }, - "state": "degraded", - "status_updated_at": "1990-07-23T01:22:30Z", - "updated_at": "2013-01-29T23:51:44Z" + "state": "modifying", + "status_updated_at": "1976-03-01T20:13:25Z", + "updated_at": "1996-05-27T17:04:41Z" }, { "connection_info": { @@ -24719,7 +24430,7 @@ ], "port": 5432 }, - "created_at": "2001-11-21T07:07:15Z", + "created_at": "1984-01-30T10:40:13Z", "error": "failed to get patroni status: connection refused", "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", @@ -24727,7 +24438,7 @@ "postgres": { "patroni_paused": true, "patroni_state": "unknown", - "pending_restart": false, + "pending_restart": true, "role": "primary", "version": "18.1" }, @@ -24752,19 +24463,10 @@ ], "version": "4.10.0" }, - "state": "degraded", - "status_updated_at": "1990-07-23T01:22:30Z", - "updated_at": "2013-01-29T23:51:44Z" - } - ], - "state": "failed", - "tenant_id": "8210ec10-2dca-406c-ac4a-0661d2189954", - "updated_at": "2025-01-01T02:30:00Z" - }, - { - "created_at": "2025-01-01T01:30:00Z", - "id": "02f1a7db-fca8-4521-b57a-2a375c1ced51", - "instances": [ + "state": "modifying", + "status_updated_at": "1976-03-01T20:13:25Z", + "updated_at": "1996-05-27T17:04:41Z" + }, { "connection_info": { "addresses": [ @@ -24773,7 +24475,7 @@ ], "port": 5432 }, - "created_at": "2001-11-21T07:07:15Z", + "created_at": "1984-01-30T10:40:13Z", "error": "failed to get patroni status: connection refused", "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", @@ -24781,7 +24483,7 @@ "postgres": { "patroni_paused": true, "patroni_state": "unknown", - "pending_restart": false, + "pending_restart": true, "role": "primary", "version": "18.1" }, @@ -24806,10 +24508,19 @@ ], "version": "4.10.0" }, - "state": "degraded", - "status_updated_at": "1990-07-23T01:22:30Z", - "updated_at": "2013-01-29T23:51:44Z" - }, + "state": "modifying", + "status_updated_at": "1976-03-01T20:13:25Z", + "updated_at": "1996-05-27T17:04:41Z" + } + ], + "state": "modifying", + "tenant_id": "8210ec10-2dca-406c-ac4a-0661d2189954", + "updated_at": "2025-01-01T02:30:00Z" + }, + { + "created_at": "2025-01-01T01:30:00Z", + "id": "02f1a7db-fca8-4521-b57a-2a375c1ced51", + "instances": [ { "connection_info": { "addresses": [ @@ -24818,7 +24529,7 @@ ], "port": 5432 }, - "created_at": "2001-11-21T07:07:15Z", + "created_at": "1984-01-30T10:40:13Z", "error": "failed to get patroni status: connection refused", "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", @@ -24826,7 +24537,7 @@ "postgres": { "patroni_paused": true, "patroni_state": "unknown", - "pending_restart": false, + "pending_restart": true, "role": "primary", "version": "18.1" }, @@ -24851,9 +24562,9 @@ ], "version": "4.10.0" }, - "state": "degraded", - "status_updated_at": "1990-07-23T01:22:30Z", - "updated_at": "2013-01-29T23:51:44Z" + "state": "modifying", + "status_updated_at": "1976-03-01T20:13:25Z", + "updated_at": "1996-05-27T17:04:41Z" }, { "connection_info": { @@ -24863,7 +24574,7 @@ ], "port": 5432 }, - "created_at": "2001-11-21T07:07:15Z", + "created_at": "1984-01-30T10:40:13Z", "error": "failed to get patroni status: connection refused", "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", @@ -24871,7 +24582,7 @@ "postgres": { "patroni_paused": true, "patroni_state": "unknown", - "pending_restart": false, + "pending_restart": true, "role": "primary", "version": "18.1" }, @@ -24896,9 +24607,9 @@ ], "version": "4.10.0" }, - "state": "degraded", - "status_updated_at": "1990-07-23T01:22:30Z", - "updated_at": "2013-01-29T23:51:44Z" + "state": "modifying", + "status_updated_at": "1976-03-01T20:13:25Z", + "updated_at": "1996-05-27T17:04:41Z" }, { "connection_info": { @@ -24908,7 +24619,7 @@ ], "port": 5432 }, - "created_at": "2001-11-21T07:07:15Z", + "created_at": "1984-01-30T10:40:13Z", "error": "failed to get patroni status: connection refused", "host_id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", "id": "a67cbb36-c3c3-49c9-8aac-f4a0438a883d", @@ -24916,7 +24627,7 @@ "postgres": { "patroni_paused": true, "patroni_state": "unknown", - "pending_restart": false, + "pending_restart": true, "role": "primary", "version": "18.1" }, @@ -24941,12 +24652,12 @@ ], "version": "4.10.0" }, - "state": "degraded", - "status_updated_at": "1990-07-23T01:22:30Z", - "updated_at": "2013-01-29T23:51:44Z" + "state": "modifying", + "status_updated_at": "1976-03-01T20:13:25Z", + "updated_at": "1996-05-27T17:04:41Z" } ], - "state": "failed", + "state": "modifying", "tenant_id": "8210ec10-2dca-406c-ac4a-0661d2189954", "updated_at": "2025-01-01T02:30:00Z" } @@ -25219,16 +24930,6 @@ "task_id": "019783f4-75f4-71e7-85a3-c9b96b345d77", "type": "create" }, - { - "completed_at": "2025-06-18T16:52:35Z", - "created_at": "2025-06-18T16:52:05Z", - "database_id": "storefront", - "entity_id": "storefront", - "scope": "database", - "status": "completed", - "task_id": "019783f4-75f4-71e7-85a3-c9b96b345d77", - "type": "create" - }, { "completed_at": "2025-06-18T16:52:35Z", "created_at": "2025-06-18T16:52:05Z", @@ -25333,6 +25034,69 @@ } ] }, + { + "client_addresses": [ + "10.24.34.2", + "i-0123456789abcdef.ec2.internal" + ], + "cohort": { + "control_available": true, + "member_id": "lah4bsznw6kc0hp7biylmmmll", + "type": "swarm" + }, + "cpus": 4, + "data_dir": "/data", + "default_pgedge_version": { + "postgres_version": "17.6", + "spock_version": "5" + }, + "etcd_mode": "server", + "id": "de3b1388-1f0c-42f1-a86c-59ab72f255ec", + "memory": "16GiB", + "orchestrator": "swarm", + "peer_addresses": [ + "10.24.34.2", + "i-0123456789abcdef.ec2.internal" + ], + "status": { + "components": { + "Enim et voluptatum ex ea dolore.": { + "details": { + "alarms": [ + "3: NOSPACE" + ] + }, + "error": "failed to connect to etcd", + "healthy": false + }, + "Tenetur nostrum repellendus sint qui.": { + "details": { + "alarms": [ + "3: NOSPACE" + ] + }, + "error": "failed to connect to etcd", + "healthy": false + } + }, + "state": "available", + "updated_at": "2021-07-01T12:34:56Z" + }, + "supported_pgedge_versions": [ + { + "postgres_version": "17.6", + "spock_version": "5" + }, + { + "postgres_version": "17.6", + "spock_version": "5" + }, + { + "postgres_version": "17.6", + "spock_version": "5" + } + ] + }, { "client_addresses": [ "10.24.34.2", @@ -25544,26 +25308,6 @@ }, "description": "The tasks for the given entity.", "example": [ - { - "completed_at": "2025-06-18T16:52:35Z", - "created_at": "2025-06-18T16:52:05Z", - "database_id": "storefront", - "entity_id": "storefront", - "scope": "database", - "status": "completed", - "task_id": "019783f4-75f4-71e7-85a3-c9b96b345d77", - "type": "create" - }, - { - "completed_at": "2025-06-18T16:52:35Z", - "created_at": "2025-06-18T16:52:05Z", - "database_id": "storefront", - "entity_id": "storefront", - "scope": "database", - "status": "completed", - "task_id": "019783f4-75f4-71e7-85a3-c9b96b345d77", - "type": "create" - }, { "completed_at": "2025-06-18T16:52:35Z", "created_at": "2025-06-18T16:52:05Z", @@ -25675,7 +25419,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Animi recusandae." } } }, @@ -25863,7 +25608,7 @@ "maxLength": 32, "additionalProperties": { "type": "string", - "example": "Et aut aut." + "example": "Eos aut dignissimos cum voluptate modi consequatur." } }, "source_database_id": { @@ -25934,7 +25679,7 @@ "type": "array", "items": { "type": "string", - "example": "Dolore eos et sunt culpa animi dolor." + "example": "Error eligendi recusandae similique sed neque eos." }, "description": "The nodes to restore. Defaults to all nodes if empty or unspecified.", "example": [ @@ -25984,16 +25729,6 @@ "task_id": "019783f4-75f4-71e7-85a3-c9b96b345d77", "type": "create" }, - { - "completed_at": "2025-06-18T16:52:35Z", - "created_at": "2025-06-18T16:52:05Z", - "database_id": "storefront", - "entity_id": "storefront", - "scope": "database", - "status": "completed", - "task_id": "019783f4-75f4-71e7-85a3-c9b96b345d77", - "type": "create" - }, { "completed_at": "2025-06-18T16:52:35Z", "created_at": "2025-06-18T16:52:05Z", @@ -26501,7 +26236,7 @@ }, "additionalProperties": { "type": "string", - "example": "Accusamus alias ipsa qui." + "example": "Dolor quam aliquid cupiditate." } }, "gcs_bucket": { @@ -26605,7 +26340,7 @@ "type": "array", "items": { "type": "string", - "example": "i", + "example": "n", "minLength": 1, "maxLength": 1024 }, @@ -26735,7 +26470,7 @@ "type": "array", "items": { "type": "string", - "example": "Et animi magnam velit vitae praesentium ad." + "example": "Quis in sunt dignissimos occaecati cupiditate." }, "description": "The addresses of the host that's running this service instance.", "example": [ @@ -26779,6 +26514,11 @@ "host_port": 8080, "name": "web-client" }, + { + "container_port": 8080, + "host_port": 8080, + "name": "web-client" + }, { "container_port": 8080, "host_port": 8080, @@ -26920,6 +26660,7 @@ "target_session_attrs": "primary" }, "host_ids": [ + "de3b1388-1f0c-42f1-a86c-59ab72f255ec", "de3b1388-1f0c-42f1-a86c-59ab72f255ec" ], "memory": "512M", @@ -26974,7 +26715,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Animi recusandae." } }, "port": 0, @@ -27027,7 +26769,6 @@ }, "description": "The IDs of the hosts that should run this service. One service instance will be created per host.", "example": [ - "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], "minItems": 1 @@ -27089,7 +26830,6 @@ "target_session_attrs": "primary" }, "host_ids": [ - "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], @@ -27145,7 +26885,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Necessitatibus excepturi reprehenderit." } }, "port": 0, @@ -27315,7 +27056,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "port": 0, @@ -27368,6 +27110,8 @@ }, "description": "The IDs of the hosts that should run this service. One service instance will be created per host.", "example": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], "minItems": 1 @@ -27429,8 +27173,6 @@ "target_session_attrs": "primary" }, "host_ids": [ - "76f9b8c0-4958-11f0-a489-3bb29577c696", - "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], "memory": "512M", @@ -27485,7 +27227,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "port": 0, @@ -27538,6 +27281,8 @@ }, "description": "The IDs of the hosts that should run this service. One service instance will be created per host.", "example": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], "minItems": 1 @@ -27599,6 +27344,8 @@ "target_session_attrs": "primary" }, "host_ids": [ + "76f9b8c0-4958-11f0-a489-3bb29577c696", + "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], "memory": "512M", @@ -27653,7 +27400,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Quia reiciendis et odio omnis itaque cum." } }, "port": 0, @@ -27768,8 +27516,6 @@ "target_session_attrs": "primary" }, "host_ids": [ - "76f9b8c0-4958-11f0-a489-3bb29577c696", - "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], "memory": "512M", @@ -27824,7 +27570,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "port": 0, @@ -27938,7 +27685,6 @@ "target_session_attrs": "primary" }, "host_ids": [ - "76f9b8c0-4958-11f0-a489-3bb29577c696", "76f9b8c0-4958-11f0-a489-3bb29577c696" ], "memory": "512M", @@ -27993,7 +27739,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Dignissimos incidunt in quas totam eveniet possimus." } }, "port": 0, @@ -28069,7 +27816,7 @@ }, "additionalProperties": { "type": "string", - "example": "Error eligendi recusandae similique sed neque eos." + "example": "Veritatis quo recusandae quibusdam fuga." } }, "extra_networks": { @@ -28133,6 +27880,11 @@ } ], "maxItems": 16 + }, + "image": { + "type": "string", + "description": "User-specified container image override. Bypasses manifest version constraints entirely — the CP will deploy this image without validating it against the version manifest. The CP verifies the image exists in its registry before accepting the spec. Clearing this field causes the CP to fall back to the manifest-resolved image on the next reconcile.", + "example": "Repellat quas nostrum eos." } }, "description": "Docker Swarm-specific options.", @@ -28186,7 +27938,8 @@ "destination_path": "/backups/container", "host_path": "/Users/user/backups/host" } - ] + ], + "image": "Qui ullam qui quam sint iure eum." } }, "SwitchoverDatabaseNodeRequest": { @@ -28411,14 +28164,6 @@ "message": "task started", "timestamp": "2025-05-29T15:43:13Z" }, - { - "fields": { - "option.enabled": true, - "status": "creating" - }, - "message": "task started", - "timestamp": "2025-05-29T15:43:13Z" - }, { "fields": { "option.enabled": true, diff --git a/api/apiv1/gen/http/openapi3.yaml b/api/apiv1/gen/http/openapi3.yaml index 98efeaf1..89337af5 100644 --- a/api/apiv1/gen/http/openapi3.yaml +++ b/api/apiv1/gen/http/openapi3.yaml @@ -1142,18 +1142,18 @@ paths: type: array items: type: string - example: Qui excepturi debitis aperiam rerum at. + example: Possimus sit commodi in dolor unde. description: Host IDs to treat as removed during this update. Events targeting these hosts will be skipped. example: - - Facilis autem molestiae voluptatem. - - Dolorem sed alias est mollitia. - - Possimus id laudantium sed delectus. - - Ut distinctio expedita. + - Ut sint cumque quia non enim. + - Doloremque nam. + - Sed esse id natus aut. + - Minus sint totam et et. example: - - Esse odit placeat quod facere. - - Sit commodi in dolor unde optio illo. - - Sint cumque quia non. - - Perferendis doloremque nam cumque. + - Quia fuga qui id libero dignissimos voluptates. + - Numquam perspiciatis et exercitationem sequi saepe velit. + - Ex sint dolorum vel. + - Laboriosam aut dolorum est. - name: database_id in: path description: ID of the database to update. @@ -3742,46 +3742,6 @@ components: s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 - - azure_account: pgedge-backups - azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - azure_endpoint: blob.core.usgovcloudapi.net - azure_key: YXpLZXk= - base_path: /backups - custom_options: - s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab - storage-upload-chunk-size: 5MiB - gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - gcs_endpoint: localhost - gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== - id: f6b84a99-5e91-4203-be1e-131fe82e5984 - retention_full: 2 - retention_full_type: count - s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - s3_endpoint: s3.us-east-1.amazonaws.com - s3_key: AKIAIOSFODNN7EXAMPLE - s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - s3_region: us-east-1 - type: s3 - - azure_account: pgedge-backups - azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - azure_endpoint: blob.core.usgovcloudapi.net - azure_key: YXpLZXk= - base_path: /backups - custom_options: - s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab - storage-upload-chunk-size: 5MiB - gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - gcs_endpoint: localhost - gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== - id: f6b84a99-5e91-4203-be1e-131fe82e5984 - retention_full: 2 - retention_full_type: count - s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - s3_endpoint: s3.us-east-1.amazonaws.com - s3_key: AKIAIOSFODNN7EXAMPLE - s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - s3_region: us-east-1 - type: s3 minItems: 1 schedules: type: array @@ -3841,26 +3801,6 @@ components: s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 - - azure_account: pgedge-backups - azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - azure_endpoint: blob.core.usgovcloudapi.net - azure_key: YXpLZXk= - base_path: /backups - custom_options: - s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab - storage-upload-chunk-size: 5MiB - gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - gcs_endpoint: localhost - gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== - id: f6b84a99-5e91-4203-be1e-131fe82e5984 - retention_full: 2 - retention_full_type: count - s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - s3_endpoint: s3.us-east-1.amazonaws.com - s3_key: AKIAIOSFODNN7EXAMPLE - s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - s3_region: us-east-1 - type: s3 schedules: - cron_expression: 0 6 * * ? id: daily-full-backup @@ -3897,7 +3837,7 @@ components: key: value additionalProperties: type: string - example: Ipsa et et. + example: Natus qui veniam exercitationem placeat temporibus. backup_options: type: object description: Options for the backup. @@ -3905,7 +3845,7 @@ components: archive-check: "n" additionalProperties: type: string - example: Et nam quo qui qui natus. + example: Facilis repudiandae ab sed exercitationem. type: type: string description: The type of backup. @@ -3961,7 +3901,7 @@ components: storage-upload-chunk-size: 5MiB additionalProperties: type: string - example: Ut dolorem. + example: Aut doloribus rem culpa ullam minus dolore. gcs_bucket: type: string description: The GCS bucket name for this repository. Only applies when type = 'gcs'. @@ -4400,7 +4340,7 @@ components: type: array items: type: string - example: k0t + example: o47 minLength: 3 maxLength: 128 description: The peer addresses of the host that's joining the cluster. @@ -4441,7 +4381,7 @@ components: type: array items: type: string - example: Placeat temporibus aut. + example: Itaque placeat. description: Existing server to join example: - http://192.168.1.1:3000 @@ -4693,71 +4633,7 @@ components: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 - created_at: "2001-11-21T07:07:15Z" - error: 'failed to get patroni status: connection refused' - host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec - id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d - node_name: n1 - postgres: - patroni_paused: true - patroni_state: unknown - pending_restart: false - role: primary - version: "18.1" - spock: - read_only: "off" - subscriptions: - - name: sub_n1n2 - provider_node: n2 - status: down - - name: sub_n1n2 - provider_node: n2 - status: down - - name: sub_n1n2 - provider_node: n2 - status: down - version: 4.10.0 - state: degraded - status_updated_at: "1990-07-23T01:22:30Z" - updated_at: "2013-01-29T23:51:44Z" - - connection_info: - addresses: - - 10.24.34.2 - - i-0123456789abcdef.ec2.internal - port: 5432 - created_at: "2001-11-21T07:07:15Z" - error: 'failed to get patroni status: connection refused' - host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec - id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d - node_name: n1 - postgres: - patroni_paused: true - patroni_state: unknown - pending_restart: false - role: primary - version: "18.1" - spock: - read_only: "off" - subscriptions: - - name: sub_n1n2 - provider_node: n2 - status: down - - name: sub_n1n2 - provider_node: n2 - status: down - - name: sub_n1n2 - provider_node: n2 - status: down - version: 4.10.0 - state: degraded - status_updated_at: "1990-07-23T01:22:30Z" - updated_at: "2013-01-29T23:51:44Z" - - connection_info: - addresses: - - 10.24.34.2 - - i-0123456789abcdef.ec2.internal - port: 5432 - created_at: "2001-11-21T07:07:15Z" + created_at: "1984-01-30T10:40:13Z" error: 'failed to get patroni status: connection refused' host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d @@ -4765,7 +4641,7 @@ components: postgres: patroni_paused: true patroni_state: unknown - pending_restart: false + pending_restart: true role: primary version: "18.1" spock: @@ -4781,15 +4657,15 @@ components: provider_node: n2 status: down version: 4.10.0 - state: degraded - status_updated_at: "1990-07-23T01:22:30Z" - updated_at: "2013-01-29T23:51:44Z" + state: modifying + status_updated_at: "1976-03-01T20:13:25Z" + updated_at: "1996-05-27T17:04:41Z" - connection_info: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 - created_at: "2001-11-21T07:07:15Z" + created_at: "1984-01-30T10:40:13Z" error: 'failed to get patroni status: connection refused' host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d @@ -4797,7 +4673,7 @@ components: postgres: patroni_paused: true patroni_state: unknown - pending_restart: false + pending_restart: true role: primary version: "18.1" spock: @@ -4813,9 +4689,9 @@ components: provider_node: n2 status: down version: 4.10.0 - state: degraded - status_updated_at: "1990-07-23T01:22:30Z" - updated_at: "2013-01-29T23:51:44Z" + state: modifying + status_updated_at: "1976-03-01T20:13:25Z" + updated_at: "1996-05-27T17:04:41Z" service_instances: type: array items: @@ -4882,12 +4758,72 @@ components: name: web-client service_ready: true updated_at: "2025-01-28T10:05:00Z" + - created_at: "2025-01-28T10:00:00Z" + database_id: production + error: 'failed to start container: image not found' + host_id: host-1 + service_id: mcp-server + service_instance_id: mcp-server-host-1 + state: running + status: + addresses: + - 10.24.34.2 + - i-0123456789abcdef.ec2.internal + container_id: a1b2c3d4e5f6 + health_check: + checked_at: "2025-01-28T10:00:00Z" + message: Connection refused + status: healthy + image_version: 1.0.0 + last_health_at: "2025-01-28T10:00:00Z" + ports: + - container_port: 8080 + host_port: 8080 + name: web-client + - container_port: 8080 + host_port: 8080 + name: web-client + - container_port: 8080 + host_port: 8080 + name: web-client + service_ready: true + updated_at: "2025-01-28T10:05:00Z" + - created_at: "2025-01-28T10:00:00Z" + database_id: production + error: 'failed to start container: image not found' + host_id: host-1 + service_id: mcp-server + service_instance_id: mcp-server-host-1 + state: running + status: + addresses: + - 10.24.34.2 + - i-0123456789abcdef.ec2.internal + container_id: a1b2c3d4e5f6 + health_check: + checked_at: "2025-01-28T10:00:00Z" + message: Connection refused + status: healthy + image_version: 1.0.0 + last_health_at: "2025-01-28T10:00:00Z" + ports: + - container_port: 8080 + host_port: 8080 + name: web-client + - container_port: 8080 + host_port: 8080 + name: web-client + - container_port: 8080 + host_port: 8080 + name: web-client + service_ready: true + updated_at: "2025-01-28T10:05:00Z" spec: $ref: '#/components/schemas/DatabaseSpec' state: type: string description: Current state of the database. - example: creating + example: degraded enum: - creating - modifying @@ -5134,38 +5070,6 @@ components: state: available status_updated_at: "1993-04-25T23:06:28Z" updated_at: "1981-08-22T23:20:01Z" - - connection_info: - addresses: - - 10.24.34.2 - - i-0123456789abcdef.ec2.internal - port: 5432 - created_at: "2011-03-15T17:48:48Z" - error: 'failed to get patroni status: connection refused' - host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec - id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d - node_name: n1 - postgres: - patroni_paused: false - patroni_state: unknown - pending_restart: true - role: primary - version: "18.1" - spock: - read_only: "off" - subscriptions: - - name: sub_n1n2 - provider_node: n2 - status: down - - name: sub_n1n2 - provider_node: n2 - status: down - - name: sub_n1n2 - provider_node: n2 - status: down - version: 4.10.0 - state: available - status_updated_at: "1993-04-25T23:06:28Z" - updated_at: "1981-08-22T23:20:01Z" service_instances: type: array items: @@ -5243,7 +5147,7 @@ components: state: type: string description: Current state of the database. - example: unknown + example: creating enum: - creating - modifying @@ -5458,117 +5362,20 @@ components: state: available status_updated_at: "1993-04-25T23:06:28Z" updated_at: "1981-08-22T23:20:01Z" - - connection_info: - addresses: - - 10.24.34.2 - - i-0123456789abcdef.ec2.internal - port: 5432 - created_at: "2011-03-15T17:48:48Z" - error: 'failed to get patroni status: connection refused' - host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec - id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d - node_name: n1 - postgres: - patroni_paused: false - patroni_state: unknown - pending_restart: true - role: primary - version: "18.1" - spock: - read_only: "off" - subscriptions: - - name: sub_n1n2 - provider_node: n2 - status: down - - name: sub_n1n2 - provider_node: n2 - status: down - - name: sub_n1n2 - provider_node: n2 - status: down - version: 4.10.0 - state: available - status_updated_at: "1993-04-25T23:06:28Z" - updated_at: "1981-08-22T23:20:01Z" - - connection_info: - addresses: - - 10.24.34.2 - - i-0123456789abcdef.ec2.internal - port: 5432 - created_at: "2011-03-15T17:48:48Z" - error: 'failed to get patroni status: connection refused' - host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec - id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d - node_name: n1 - postgres: - patroni_paused: false - patroni_state: unknown - pending_restart: true - role: primary - version: "18.1" - spock: - read_only: "off" - subscriptions: - - name: sub_n1n2 - provider_node: n2 - status: down - - name: sub_n1n2 - provider_node: n2 - status: down - - name: sub_n1n2 - provider_node: n2 - status: down - version: 4.10.0 - state: available - status_updated_at: "1993-04-25T23:06:28Z" - updated_at: "1981-08-22T23:20:01Z" - service_instances: - type: array - items: - $ref: '#/components/schemas/ServiceInstance' - description: Service instances running alongside this database. - example: - - created_at: "2025-01-28T10:00:00Z" - database_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - error: 'failed to start container: image not found' - host_id: host-1 - service_id: mcp-server - service_instance_id: mcp-server-host-1 - state: running - status: - addresses: - - 10.24.34.2 - - i-0123456789abcdef.ec2.internal - container_id: a1b2c3d4e5f6 - health_check: - checked_at: "2025-01-28T10:00:00Z" - message: Connection refused - status: healthy - image_version: 1.0.0 - last_health_at: "2025-01-28T10:00:00Z" - ports: - - container_port: 8080 - host_port: 8080 - name: web-client - - container_port: 8080 - host_port: 8080 - name: web-client - - container_port: 8080 - host_port: 8080 - name: web-client - - container_port: 8080 - host_port: 8080 - name: web-client - service_ready: true - updated_at: "2025-01-28T10:05:00Z" - - created_at: "2025-01-28T10:00:00Z" - database_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - error: 'failed to start container: image not found' - host_id: host-1 - service_id: mcp-server - service_instance_id: mcp-server-host-1 - state: running - status: + service_instances: + type: array + items: + $ref: '#/components/schemas/ServiceInstance' + description: Service instances running alongside this database. + example: + - created_at: "2025-01-28T10:00:00Z" + database_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + error: 'failed to start container: image not found' + host_id: host-1 + service_id: mcp-server + service_instance_id: mcp-server-host-1 + state: running + status: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal @@ -5912,38 +5719,6 @@ components: state: available status_updated_at: "1993-04-25T23:06:28Z" updated_at: "1981-08-22T23:20:01Z" - - connection_info: - addresses: - - 10.24.34.2 - - i-0123456789abcdef.ec2.internal - port: 5432 - created_at: "2011-03-15T17:48:48Z" - error: 'failed to get patroni status: connection refused' - host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec - id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d - node_name: n1 - postgres: - patroni_paused: false - patroni_state: unknown - pending_restart: true - role: primary - version: "18.1" - spock: - read_only: "off" - subscriptions: - - name: sub_n1n2 - provider_node: n2 - status: down - - name: sub_n1n2 - provider_node: n2 - status: down - - name: sub_n1n2 - provider_node: n2 - status: down - version: 4.10.0 - state: available - status_updated_at: "1993-04-25T23:06:28Z" - updated_at: "1981-08-22T23:20:01Z" service_instances: type: array items: @@ -6016,78 +5791,12 @@ components: name: web-client service_ready: true updated_at: "2025-01-28T10:05:00Z" - - created_at: "2025-01-28T10:00:00Z" - database_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - error: 'failed to start container: image not found' - host_id: host-1 - service_id: mcp-server - service_instance_id: mcp-server-host-1 - state: running - status: - addresses: - - 10.24.34.2 - - i-0123456789abcdef.ec2.internal - container_id: a1b2c3d4e5f6 - health_check: - checked_at: "2025-01-28T10:00:00Z" - message: Connection refused - status: healthy - image_version: 1.0.0 - last_health_at: "2025-01-28T10:00:00Z" - ports: - - container_port: 8080 - host_port: 8080 - name: web-client - - container_port: 8080 - host_port: 8080 - name: web-client - - container_port: 8080 - host_port: 8080 - name: web-client - - container_port: 8080 - host_port: 8080 - name: web-client - service_ready: true - updated_at: "2025-01-28T10:05:00Z" - - created_at: "2025-01-28T10:00:00Z" - database_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - error: 'failed to start container: image not found' - host_id: host-1 - service_id: mcp-server - service_instance_id: mcp-server-host-1 - state: running - status: - addresses: - - 10.24.34.2 - - i-0123456789abcdef.ec2.internal - container_id: a1b2c3d4e5f6 - health_check: - checked_at: "2025-01-28T10:00:00Z" - message: Connection refused - status: healthy - image_version: 1.0.0 - last_health_at: "2025-01-28T10:00:00Z" - ports: - - container_port: 8080 - host_port: 8080 - name: web-client - - container_port: 8080 - host_port: 8080 - name: web-client - - container_port: 8080 - host_port: 8080 - name: web-client - - container_port: 8080 - host_port: 8080 - name: web-client - service_ready: true - updated_at: "2025-01-28T10:05:00Z" spec: $ref: '#/components/schemas/DatabaseSpec6' state: type: string description: Current state of the database. - example: modifying + example: available enum: - creating - modifying @@ -6302,6 +6011,38 @@ components: state: available status_updated_at: "1993-04-25T23:06:28Z" updated_at: "1981-08-22T23:20:01Z" + - connection_info: + addresses: + - 10.24.34.2 + - i-0123456789abcdef.ec2.internal + port: 5432 + created_at: "2011-03-15T17:48:48Z" + error: 'failed to get patroni status: connection refused' + host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec + id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d + node_name: n1 + postgres: + patroni_paused: false + patroni_state: unknown + pending_restart: true + role: primary + version: "18.1" + spock: + read_only: "off" + subscriptions: + - name: sub_n1n2 + provider_node: n2 + status: down + - name: sub_n1n2 + provider_node: n2 + status: down + - name: sub_n1n2 + provider_node: n2 + status: down + version: 4.10.0 + state: available + status_updated_at: "1993-04-25T23:06:28Z" + updated_at: "1981-08-22T23:20:01Z" service_instances: type: array items: @@ -6412,7 +6153,7 @@ components: state: type: string description: Current state of the database. - example: failed + example: deleting enum: - creating - modifying @@ -6550,7 +6291,7 @@ components: type: array items: type: string - example: Eius at. + example: Qui ut et. description: Optional ordered list of database node names. When set, the service's database connection includes only the listed nodes in the specified order. example: - n1 @@ -6618,7 +6359,7 @@ components: type: array items: type: string - example: Modi explicabo. + example: Non quae. description: Additional pg_hba.conf entries for this particular node, one rule per array element. Prepended to the database-level pg_hba_conf entries, so node entries take first-match priority. Entries are inserted between control-plane's system-user rules and its catch-all, and cannot affect control-plane-internal connectivity. example: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -6626,7 +6367,7 @@ components: type: array items: type: string - example: Alias qui et eius. + example: Ea omnis ut dolor dolorem impedit laudantium. description: Additional pg_ident.conf entries for this particular node, one mapping per array element. Prepended to the database-level pg_ident_conf entries. example: - ssl_users CN=alice,O=example alice @@ -6745,6 +6486,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Animi recusandae. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -6804,8 +6546,6 @@ components: description: The IDs of the hosts that should run this node. When multiple hosts are specified, one host will chosen as a primary, and the others will be read replicas. example: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - - 76f9b8c0-4958-11f0-a489-3bb29577c696 - - 76f9b8c0-4958-11f0-a489-3bb29577c696 minItems: 1 memory: type: string @@ -6830,7 +6570,7 @@ components: type: array items: type: string - example: Ut quae eos. + example: Excepturi sapiente neque doloribus consequatur voluptatibus. description: Additional pg_hba.conf entries for this particular node, one rule per array element. Prepended to the database-level pg_hba_conf entries, so node entries take first-match priority. Entries are inserted between control-plane's system-user rules and its catch-all, and cannot affect control-plane-internal connectivity. example: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -6838,7 +6578,7 @@ components: type: array items: type: string - example: Voluptates quo. + example: Et nisi nihil corporis. description: Additional pg_ident.conf entries for this particular node, one mapping per array element. Prepended to the database-level pg_ident_conf entries. example: - ssl_users CN=alice,O=example alice @@ -6909,26 +6649,6 @@ components: s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 - - azure_account: pgedge-backups - azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - azure_endpoint: blob.core.usgovcloudapi.net - azure_key: YXpLZXk= - base_path: /backups - custom_options: - s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab - storage-upload-chunk-size: 5MiB - gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - gcs_endpoint: localhost - gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== - id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - retention_full: 2 - retention_full_type: count - s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - s3_endpoint: s3.us-east-1.amazonaws.com - s3_key: AKIAIOSFODNN7EXAMPLE - s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - s3_region: us-east-1 - type: s3 schedules: - cron_expression: 0 6 * * ? id: daily-full-backup @@ -6975,6 +6695,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Necessitatibus excepturi reprehenderit. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -7034,6 +6755,7 @@ components: description: The IDs of the hosts that should run this node. When multiple hosts are specified, one host will chosen as a primary, and the others will be read replicas. example: - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 minItems: 1 memory: type: string @@ -7058,7 +6780,7 @@ components: type: array items: type: string - example: Distinctio atque. + example: Velit distinctio sed amet. description: Additional pg_hba.conf entries for this particular node, one rule per array element. Prepended to the database-level pg_hba_conf entries, so node entries take first-match priority. Entries are inserted between control-plane's system-user rules and its catch-all, and cannot affect control-plane-internal connectivity. example: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -7066,7 +6788,7 @@ components: type: array items: type: string - example: Autem doloremque et excepturi. + example: Voluptas qui. description: Additional pg_ident.conf entries for this particular node, one mapping per array element. Prepended to the database-level pg_ident_conf entries. example: - ssl_users CN=alice,O=example alice @@ -7205,6 +6927,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -7264,6 +6987,7 @@ components: description: The IDs of the hosts that should run this node. When multiple hosts are specified, one host will chosen as a primary, and the others will be read replicas. example: - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 minItems: 1 memory: type: string @@ -7288,7 +7012,7 @@ components: type: array items: type: string - example: Est temporibus molestias officiis sint. + example: Numquam incidunt eaque totam at culpa ut. description: Additional pg_hba.conf entries for this particular node, one rule per array element. Prepended to the database-level pg_hba_conf entries, so node entries take first-match priority. Entries are inserted between control-plane's system-user rules and its catch-all, and cannot affect control-plane-internal connectivity. example: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -7296,7 +7020,7 @@ components: type: array items: type: string - example: Ad aut velit distinctio sed. + example: Iste dignissimos exercitationem. description: Additional pg_ident.conf entries for this particular node, one mapping per array element. Prepended to the database-level pg_ident_conf entries. example: - ssl_users CN=alice,O=example alice @@ -7400,6 +7124,8 @@ components: cpus: 500m host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 500M name: n1 orchestrator_opts: @@ -7433,6 +7159,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -7492,6 +7219,7 @@ components: description: The IDs of the hosts that should run this node. When multiple hosts are specified, one host will chosen as a primary, and the others will be read replicas. example: - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 minItems: 1 memory: type: string @@ -7516,7 +7244,7 @@ components: type: array items: type: string - example: Quaerat rem. + example: Consequuntur et. description: Additional pg_hba.conf entries for this particular node, one rule per array element. Prepended to the database-level pg_hba_conf entries, so node entries take first-match priority. Entries are inserted between control-plane's system-user rules and its catch-all, and cannot affect control-plane-internal connectivity. example: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -7524,7 +7252,7 @@ components: type: array items: type: string - example: Qui numquam incidunt eaque totam at. + example: Et nulla omnis nobis dolor sit. description: Additional pg_ident.conf entries for this particular node, one mapping per array element. Prepended to the database-level pg_ident_conf entries. example: - ssl_users CN=alice,O=example alice @@ -7595,26 +7323,6 @@ components: s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 - - azure_account: pgedge-backups - azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - azure_endpoint: blob.core.usgovcloudapi.net - azure_key: YXpLZXk= - base_path: /backups - custom_options: - s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab - storage-upload-chunk-size: 5MiB - gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - gcs_endpoint: localhost - gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== - id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - retention_full: 2 - retention_full_type: count - s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - s3_endpoint: s3.us-east-1.amazonaws.com - s3_key: AKIAIOSFODNN7EXAMPLE - s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - s3_region: us-east-1 - type: s3 schedules: - cron_expression: 0 6 * * ? id: daily-full-backup @@ -7628,8 +7336,6 @@ components: cpus: 500m host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - - 76f9b8c0-4958-11f0-a489-3bb29577c696 - - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 500M name: n1 orchestrator_opts: @@ -7663,6 +7369,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Quia reiciendis et odio omnis itaque cum. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -7722,8 +7429,6 @@ components: description: The IDs of the hosts that should run this node. When multiple hosts are specified, one host will chosen as a primary, and the others will be read replicas. example: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - - 76f9b8c0-4958-11f0-a489-3bb29577c696 - - 76f9b8c0-4958-11f0-a489-3bb29577c696 minItems: 1 memory: type: string @@ -7748,7 +7453,7 @@ components: type: array items: type: string - example: Occaecati et et consequuntur. + example: Deserunt quis. description: Additional pg_hba.conf entries for this particular node, one rule per array element. Prepended to the database-level pg_hba_conf entries, so node entries take first-match priority. Entries are inserted between control-plane's system-user rules and its catch-all, and cannot affect control-plane-internal connectivity. example: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -7756,7 +7461,7 @@ components: type: array items: type: string - example: Qui et nulla omnis nobis dolor. + example: Officiis libero. description: Additional pg_ident.conf entries for this particular node, one mapping per array element. Prepended to the database-level pg_ident_conf entries. example: - ssl_users CN=alice,O=example alice @@ -7893,6 +7598,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -7952,6 +7658,8 @@ components: description: The IDs of the hosts that should run this node. When multiple hosts are specified, one host will chosen as a primary, and the others will be read replicas. example: - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 minItems: 1 memory: type: string @@ -7976,7 +7684,7 @@ components: type: array items: type: string - example: Ducimus deserunt quis commodi officiis libero mollitia. + example: Aperiam rerum at eveniet consectetur facilis autem. description: Additional pg_hba.conf entries for this particular node, one rule per array element. Prepended to the database-level pg_hba_conf entries, so node entries take first-match priority. Entries are inserted between control-plane's system-user rules and its catch-all, and cannot affect control-plane-internal connectivity. example: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -7984,7 +7692,7 @@ components: type: array items: type: string - example: Impedit ab. + example: Voluptatem velit dolorem. description: Additional pg_ident.conf entries for this particular node, one mapping per array element. Prepended to the database-level pg_ident_conf entries. example: - ssl_users CN=alice,O=example alice @@ -8088,6 +7796,8 @@ components: cpus: 500m host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 500M name: n1 orchestrator_opts: @@ -8121,6 +7831,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -8290,6 +8001,135 @@ components: cpus: 500m host_ids: - de3b1388-1f0c-42f1-a86c-59ab72f255ec + - de3b1388-1f0c-42f1-a86c-59ab72f255ec + - de3b1388-1f0c-42f1-a86c-59ab72f255ec + memory: 500M + name: n1 + orchestrator_opts: + swarm: + extra_labels: + traefik.enable: "true" + traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) + extra_networks: + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + extra_volumes: + - destination_path: /backups/container + host_path: /Users/user/backups/host + - destination_path: /backups/container + host_path: /Users/user/backups/host + - destination_path: /backups/container + host_path: /Users/user/backups/host + image: Animi recusandae. + patroni_port: 8888 + pg_hba_conf: + - host example myapp_user 10.0.0.0/8 scram-sha-256 + pg_ident_conf: + - ssl_users CN=alice,O=example alice + port: 5432 + postgres_version: "17.6" + postgresql_conf: + max_connections: 1000 + restore_config: + repository: + azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: f6b84a99-5e91-4203-be1e-131fe82e5984 + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 + restore_options: + set: 20250505-153628F + target: "123456" + type: xid + source_database_id: 02f1a7db-fca8-4521-b57a-2a375c1ced51 + source_database_name: northwind + source_node_name: n1 + source_node: n1 + - backup_config: + repositories: + - azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + storage-upload-chunk-size: 5MiB + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: f6b84a99-5e91-4203-be1e-131fe82e5984 + retention_full: 2 + retention_full_type: count + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 + - azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + storage-upload-chunk-size: 5MiB + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: f6b84a99-5e91-4203-be1e-131fe82e5984 + retention_full: 2 + retention_full_type: count + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 + schedules: + - cron_expression: 0 6 * * ? + id: daily-full-backup + type: full + - cron_expression: 0 6 * * ? + id: daily-full-backup + type: full + - cron_expression: 0 6 * * ? + id: daily-full-backup + type: full + cpus: 500m + host_ids: + - de3b1388-1f0c-42f1-a86c-59ab72f255ec + - de3b1388-1f0c-42f1-a86c-59ab72f255ec + - de3b1388-1f0c-42f1-a86c-59ab72f255ec memory: 500M name: n1 orchestrator_opts: @@ -8323,6 +8163,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Animi recusandae. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -8374,7 +8215,7 @@ components: type: array items: type: string - example: Reprehenderit harum sapiente qui ullam qui. + example: Velit et labore in dolor quisquam placeat. description: Additional pg_hba.conf entries, one rule per array element. Inserted between control-plane's system-user rules and its catch-all, so they cannot affect control-plane-internal connectivity (Patroni, replication, health checks). Node-level pg_hba_conf entries are prepended to these. example: - hostssl all myapp_user 203.0.113.0/24 scram-sha-256 @@ -8383,7 +8224,7 @@ components: type: array items: type: string - example: Sint iure eum ducimus quia deserunt animi. + example: Eos molestiae voluptates laborum. description: Additional pg_ident.conf entries, one mapping per array element. Purely additive; control-plane writes no pg_ident entries of its own. The primary use case is cert auth with map= translating certificate CNs to PostgreSQL usernames. example: - ssl_users CN=alice,O=example alice @@ -8429,7 +8270,6 @@ components: target_session_attrs: primary host_ids: - de3b1388-1f0c-42f1-a86c-59ab72f255ec - - de3b1388-1f0c-42f1-a86c-59ab72f255ec memory: 512M orchestrator_opts: swarm: @@ -8462,6 +8302,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Animi recusandae. port: 0 service_id: analytics-service service_type: rag @@ -8479,6 +8320,55 @@ components: target_session_attrs: primary host_ids: - de3b1388-1f0c-42f1-a86c-59ab72f255ec + memory: 512M + orchestrator_opts: + swarm: + extra_labels: + traefik.enable: "true" + traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) + extra_networks: + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + extra_volumes: + - destination_path: /backups/container + host_path: /Users/user/backups/host + - destination_path: /backups/container + host_path: /Users/user/backups/host + - destination_path: /backups/container + host_path: /Users/user/backups/host + image: Animi recusandae. + port: 0 + service_id: analytics-service + service_type: rag + version: latest + - config: + llm_model: gpt-4 + llm_provider: openai + openai_api_key: sk-... + connect_as: app + cpus: 500m + database_connection: + target_nodes: + - n1 + - n2 + target_session_attrs: primary + host_ids: - de3b1388-1f0c-42f1-a86c-59ab72f255ec memory: 512M orchestrator_opts: @@ -8512,6 +8402,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Animi recusandae. port: 0 service_id: analytics-service service_type: rag @@ -8661,6 +8552,8 @@ components: cpus: 500m host_ids: - de3b1388-1f0c-42f1-a86c-59ab72f255ec + - de3b1388-1f0c-42f1-a86c-59ab72f255ec + - de3b1388-1f0c-42f1-a86c-59ab72f255ec memory: 500M name: n1 orchestrator_opts: @@ -8694,6 +8587,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Animi recusandae. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -8785,6 +8679,8 @@ components: cpus: 500m host_ids: - de3b1388-1f0c-42f1-a86c-59ab72f255ec + - de3b1388-1f0c-42f1-a86c-59ab72f255ec + - de3b1388-1f0c-42f1-a86c-59ab72f255ec memory: 500M name: n1 orchestrator_opts: @@ -8818,130 +8714,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host - patroni_port: 8888 - pg_hba_conf: - - host example myapp_user 10.0.0.0/8 scram-sha-256 - pg_ident_conf: - - ssl_users CN=alice,O=example alice - port: 5432 - postgres_version: "17.6" - postgresql_conf: - max_connections: 1000 - restore_config: - repository: - azure_account: pgedge-backups - azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - azure_endpoint: blob.core.usgovcloudapi.net - azure_key: YXpLZXk= - base_path: /backups - custom_options: - s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab - gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - gcs_endpoint: localhost - gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== - id: f6b84a99-5e91-4203-be1e-131fe82e5984 - s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - s3_endpoint: s3.us-east-1.amazonaws.com - s3_key: AKIAIOSFODNN7EXAMPLE - s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - s3_region: us-east-1 - type: s3 - restore_options: - set: 20250505-153628F - target: "123456" - type: xid - source_database_id: 02f1a7db-fca8-4521-b57a-2a375c1ced51 - source_database_name: northwind - source_node_name: n1 - source_node: n1 - - backup_config: - repositories: - - azure_account: pgedge-backups - azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - azure_endpoint: blob.core.usgovcloudapi.net - azure_key: YXpLZXk= - base_path: /backups - custom_options: - s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab - storage-upload-chunk-size: 5MiB - gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - gcs_endpoint: localhost - gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== - id: f6b84a99-5e91-4203-be1e-131fe82e5984 - retention_full: 2 - retention_full_type: count - s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - s3_endpoint: s3.us-east-1.amazonaws.com - s3_key: AKIAIOSFODNN7EXAMPLE - s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - s3_region: us-east-1 - type: s3 - - azure_account: pgedge-backups - azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - azure_endpoint: blob.core.usgovcloudapi.net - azure_key: YXpLZXk= - base_path: /backups - custom_options: - s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab - storage-upload-chunk-size: 5MiB - gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - gcs_endpoint: localhost - gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== - id: f6b84a99-5e91-4203-be1e-131fe82e5984 - retention_full: 2 - retention_full_type: count - s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - s3_endpoint: s3.us-east-1.amazonaws.com - s3_key: AKIAIOSFODNN7EXAMPLE - s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - s3_region: us-east-1 - type: s3 - schedules: - - cron_expression: 0 6 * * ? - id: daily-full-backup - type: full - - cron_expression: 0 6 * * ? - id: daily-full-backup - type: full - - cron_expression: 0 6 * * ? - id: daily-full-backup - type: full - cpus: 500m - host_ids: - - de3b1388-1f0c-42f1-a86c-59ab72f255ec - memory: 500M - name: n1 - orchestrator_opts: - swarm: - extra_labels: - traefik.enable: "true" - traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) - extra_networks: - - aliases: - - pg-db - - db-alias - driver_opts: - com.docker.network.endpoint.expose: "true" - id: traefik-public - - aliases: - - pg-db - - db-alias - driver_opts: - com.docker.network.endpoint.expose: "true" - id: traefik-public - - aliases: - - pg-db - - db-alias - driver_opts: - com.docker.network.endpoint.expose: "true" - id: traefik-public - extra_volumes: - - destination_path: /backups/container - host_path: /Users/user/backups/host - - destination_path: /backups/container - host_path: /Users/user/backups/host - - destination_path: /backups/container - host_path: /Users/user/backups/host + image: Animi recusandae. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -9009,6 +8782,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Animi recusandae. patroni_port: 8888 pg_hba_conf: - hostssl all myapp_user 203.0.113.0/24 scram-sha-256 @@ -9066,7 +8840,6 @@ components: target_session_attrs: primary host_ids: - de3b1388-1f0c-42f1-a86c-59ab72f255ec - - de3b1388-1f0c-42f1-a86c-59ab72f255ec memory: 512M orchestrator_opts: swarm: @@ -9099,6 +8872,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Animi recusandae. port: 0 service_id: analytics-service service_type: rag @@ -9116,7 +8890,6 @@ components: target_session_attrs: primary host_ids: - de3b1388-1f0c-42f1-a86c-59ab72f255ec - - de3b1388-1f0c-42f1-a86c-59ab72f255ec memory: 512M orchestrator_opts: swarm: @@ -9149,6 +8922,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Animi recusandae. port: 0 service_id: analytics-service service_type: rag @@ -9166,7 +8940,6 @@ components: target_session_attrs: primary host_ids: - de3b1388-1f0c-42f1-a86c-59ab72f255ec - - de3b1388-1f0c-42f1-a86c-59ab72f255ec memory: 512M orchestrator_opts: swarm: @@ -9199,6 +8972,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Animi recusandae. port: 0 service_id: analytics-service service_type: rag @@ -9216,7 +8990,6 @@ components: target_session_attrs: primary host_ids: - de3b1388-1f0c-42f1-a86c-59ab72f255ec - - de3b1388-1f0c-42f1-a86c-59ab72f255ec memory: 512M orchestrator_opts: swarm: @@ -9249,6 +9022,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Animi recusandae. port: 0 service_id: analytics-service service_type: rag @@ -9360,172 +9134,6 @@ components: s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 - - azure_account: pgedge-backups - azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - azure_endpoint: blob.core.usgovcloudapi.net - azure_key: YXpLZXk= - base_path: /backups - custom_options: - s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab - storage-upload-chunk-size: 5MiB - gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - gcs_endpoint: localhost - gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== - id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - retention_full: 2 - retention_full_type: count - s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - s3_endpoint: s3.us-east-1.amazonaws.com - s3_key: AKIAIOSFODNN7EXAMPLE - s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - s3_region: us-east-1 - type: s3 - schedules: - - cron_expression: 0 6 * * ? - id: daily-full-backup - type: full - - cron_expression: 0 6 * * ? - id: daily-full-backup - type: full - - cron_expression: 0 6 * * ? - id: daily-full-backup - type: full - cpus: 500m - host_ids: - - 76f9b8c0-4958-11f0-a489-3bb29577c696 - - 76f9b8c0-4958-11f0-a489-3bb29577c696 - - 76f9b8c0-4958-11f0-a489-3bb29577c696 - memory: 500M - name: n1 - orchestrator_opts: - swarm: - extra_labels: - traefik.enable: "true" - traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) - extra_networks: - - aliases: - - pg-db - - db-alias - driver_opts: - com.docker.network.endpoint.expose: "true" - id: traefik-public - - aliases: - - pg-db - - db-alias - driver_opts: - com.docker.network.endpoint.expose: "true" - id: traefik-public - - aliases: - - pg-db - - db-alias - driver_opts: - com.docker.network.endpoint.expose: "true" - id: traefik-public - extra_volumes: - - destination_path: /backups/container - host_path: /Users/user/backups/host - - destination_path: /backups/container - host_path: /Users/user/backups/host - - destination_path: /backups/container - host_path: /Users/user/backups/host - patroni_port: 8888 - pg_hba_conf: - - host example myapp_user 10.0.0.0/8 scram-sha-256 - pg_ident_conf: - - ssl_users CN=alice,O=example alice - port: 5432 - postgres_version: "17.6" - postgresql_conf: - max_connections: 1000 - restore_config: - repository: - azure_account: pgedge-backups - azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - azure_endpoint: blob.core.usgovcloudapi.net - azure_key: YXpLZXk= - base_path: /backups - custom_options: - s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab - gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - gcs_endpoint: localhost - gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== - id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - s3_endpoint: s3.us-east-1.amazonaws.com - s3_key: AKIAIOSFODNN7EXAMPLE - s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - s3_region: us-east-1 - type: s3 - restore_options: - set: 20250505-153628F - target: "123456" - type: xid - source_database_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - source_database_name: northwind - source_node_name: n1 - source_node: n1 - - backup_config: - repositories: - - azure_account: pgedge-backups - azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - azure_endpoint: blob.core.usgovcloudapi.net - azure_key: YXpLZXk= - base_path: /backups - custom_options: - s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab - storage-upload-chunk-size: 5MiB - gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - gcs_endpoint: localhost - gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== - id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - retention_full: 2 - retention_full_type: count - s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - s3_endpoint: s3.us-east-1.amazonaws.com - s3_key: AKIAIOSFODNN7EXAMPLE - s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - s3_region: us-east-1 - type: s3 - - azure_account: pgedge-backups - azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - azure_endpoint: blob.core.usgovcloudapi.net - azure_key: YXpLZXk= - base_path: /backups - custom_options: - s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab - storage-upload-chunk-size: 5MiB - gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - gcs_endpoint: localhost - gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== - id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - retention_full: 2 - retention_full_type: count - s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - s3_endpoint: s3.us-east-1.amazonaws.com - s3_key: AKIAIOSFODNN7EXAMPLE - s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - s3_region: us-east-1 - type: s3 - - azure_account: pgedge-backups - azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - azure_endpoint: blob.core.usgovcloudapi.net - azure_key: YXpLZXk= - base_path: /backups - custom_options: - s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab - storage-upload-chunk-size: 5MiB - gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - gcs_endpoint: localhost - gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== - id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - retention_full: 2 - retention_full_type: count - s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - s3_endpoint: s3.us-east-1.amazonaws.com - s3_key: AKIAIOSFODNN7EXAMPLE - s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - s3_region: us-east-1 - type: s3 schedules: - cron_expression: 0 6 * * ? id: daily-full-backup @@ -9539,8 +9147,6 @@ components: cpus: 500m host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - - 76f9b8c0-4958-11f0-a489-3bb29577c696 - - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 500M name: n1 orchestrator_opts: @@ -9574,6 +9180,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Necessitatibus excepturi reprehenderit. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -9652,26 +9259,6 @@ components: s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 - - azure_account: pgedge-backups - azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - azure_endpoint: blob.core.usgovcloudapi.net - azure_key: YXpLZXk= - base_path: /backups - custom_options: - s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab - storage-upload-chunk-size: 5MiB - gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - gcs_endpoint: localhost - gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== - id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - retention_full: 2 - retention_full_type: count - s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - s3_endpoint: s3.us-east-1.amazonaws.com - s3_key: AKIAIOSFODNN7EXAMPLE - s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - s3_region: us-east-1 - type: s3 schedules: - cron_expression: 0 6 * * ? id: daily-full-backup @@ -9685,8 +9272,6 @@ components: cpus: 500m host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - - 76f9b8c0-4958-11f0-a489-3bb29577c696 - - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 500M name: n1 orchestrator_opts: @@ -9720,6 +9305,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Necessitatibus excepturi reprehenderit. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -9771,7 +9357,7 @@ components: type: array items: type: string - example: Est asperiores quis in sunt dignissimos. + example: Fuga occaecati optio accusantium eos voluptatibus sunt. description: Additional pg_hba.conf entries, one rule per array element. Inserted between control-plane's system-user rules and its catch-all, so they cannot affect control-plane-internal connectivity (Patroni, replication, health checks). Node-level pg_hba_conf entries are prepended to these. example: - hostssl all myapp_user 203.0.113.0/24 scram-sha-256 @@ -9780,7 +9366,7 @@ components: type: array items: type: string - example: Cupiditate molestiae. + example: Sapiente doloribus. description: Additional pg_ident.conf entries, one mapping per array element. Purely additive; control-plane writes no pg_ident entries of its own. The primary use case is cert auth with map= translating certificate CNs to PostgreSQL usernames. example: - ssl_users CN=alice,O=example alice @@ -9859,6 +9445,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Necessitatibus excepturi reprehenderit. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -9909,106 +9496,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host - port: 0 - service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - service_type: rag - version: latest - - config: - llm_model: gpt-4 - llm_provider: openai - openai_api_key: sk-... - connect_as: app - cpus: 500m - database_connection: - target_nodes: - - n1 - - n2 - target_session_attrs: primary - host_ids: - - 76f9b8c0-4958-11f0-a489-3bb29577c696 - - 76f9b8c0-4958-11f0-a489-3bb29577c696 - memory: 512M - orchestrator_opts: - swarm: - extra_labels: - traefik.enable: "true" - traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) - extra_networks: - - aliases: - - pg-db - - db-alias - driver_opts: - com.docker.network.endpoint.expose: "true" - id: traefik-public - - aliases: - - pg-db - - db-alias - driver_opts: - com.docker.network.endpoint.expose: "true" - id: traefik-public - - aliases: - - pg-db - - db-alias - driver_opts: - com.docker.network.endpoint.expose: "true" - id: traefik-public - extra_volumes: - - destination_path: /backups/container - host_path: /Users/user/backups/host - - destination_path: /backups/container - host_path: /Users/user/backups/host - - destination_path: /backups/container - host_path: /Users/user/backups/host - port: 0 - service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - service_type: rag - version: latest - - config: - llm_model: gpt-4 - llm_provider: openai - openai_api_key: sk-... - connect_as: app - cpus: 500m - database_connection: - target_nodes: - - n1 - - n2 - target_session_attrs: primary - host_ids: - - 76f9b8c0-4958-11f0-a489-3bb29577c696 - - 76f9b8c0-4958-11f0-a489-3bb29577c696 - memory: 512M - orchestrator_opts: - swarm: - extra_labels: - traefik.enable: "true" - traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) - extra_networks: - - aliases: - - pg-db - - db-alias - driver_opts: - com.docker.network.endpoint.expose: "true" - id: traefik-public - - aliases: - - pg-db - - db-alias - driver_opts: - com.docker.network.endpoint.expose: "true" - id: traefik-public - - aliases: - - pg-db - - db-alias - driver_opts: - com.docker.network.endpoint.expose: "true" - id: traefik-public - extra_volumes: - - destination_path: /backups/container - host_path: /Users/user/backups/host - - destination_path: /backups/container - host_path: /Users/user/backups/host - - destination_path: /backups/container - host_path: /Users/user/backups/host + image: Necessitatibus excepturi reprehenderit. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -10061,26 +9549,6 @@ components: s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 - - azure_account: pgedge-backups - azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - azure_endpoint: blob.core.usgovcloudapi.net - azure_key: YXpLZXk= - base_path: /backups - custom_options: - s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab - storage-upload-chunk-size: 5MiB - gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - gcs_endpoint: localhost - gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== - id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - retention_full: 2 - retention_full_type: count - s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - s3_endpoint: s3.us-east-1.amazonaws.com - s3_key: AKIAIOSFODNN7EXAMPLE - s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - s3_region: us-east-1 - type: s3 schedules: - cron_expression: 0 6 * * ? id: daily-full-backup @@ -10165,26 +9633,6 @@ components: s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 - - azure_account: pgedge-backups - azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - azure_endpoint: blob.core.usgovcloudapi.net - azure_key: YXpLZXk= - base_path: /backups - custom_options: - s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab - storage-upload-chunk-size: 5MiB - gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - gcs_endpoint: localhost - gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== - id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - retention_full: 2 - retention_full_type: count - s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - s3_endpoint: s3.us-east-1.amazonaws.com - s3_key: AKIAIOSFODNN7EXAMPLE - s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - s3_region: us-east-1 - type: s3 schedules: - cron_expression: 0 6 * * ? id: daily-full-backup @@ -10198,8 +9646,6 @@ components: cpus: 500m host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - - 76f9b8c0-4958-11f0-a489-3bb29577c696 - - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 500M name: n1 orchestrator_opts: @@ -10233,6 +9679,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Necessitatibus excepturi reprehenderit. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -10300,6 +9747,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Necessitatibus excepturi reprehenderit. patroni_port: 8888 pg_hba_conf: - hostssl all myapp_user 203.0.113.0/24 scram-sha-256 @@ -10392,6 +9840,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Necessitatibus excepturi reprehenderit. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -10442,6 +9891,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Necessitatibus excepturi reprehenderit. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -10492,56 +9942,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host - port: 0 - service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - service_type: rag - version: latest - - config: - llm_model: gpt-4 - llm_provider: openai - openai_api_key: sk-... - connect_as: app - cpus: 500m - database_connection: - target_nodes: - - n1 - - n2 - target_session_attrs: primary - host_ids: - - 76f9b8c0-4958-11f0-a489-3bb29577c696 - - 76f9b8c0-4958-11f0-a489-3bb29577c696 - memory: 512M - orchestrator_opts: - swarm: - extra_labels: - traefik.enable: "true" - traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) - extra_networks: - - aliases: - - pg-db - - db-alias - driver_opts: - com.docker.network.endpoint.expose: "true" - id: traefik-public - - aliases: - - pg-db - - db-alias - driver_opts: - com.docker.network.endpoint.expose: "true" - id: traefik-public - - aliases: - - pg-db - - db-alias - driver_opts: - com.docker.network.endpoint.expose: "true" - id: traefik-public - extra_volumes: - - destination_path: /backups/container - host_path: /Users/user/backups/host - - destination_path: /backups/container - host_path: /Users/user/backups/host - - destination_path: /backups/container - host_path: /Users/user/backups/host + image: Necessitatibus excepturi reprehenderit. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -10576,7 +9977,7 @@ components: - LOGIN - CREATEDB - CREATEROLE - db_owner: false + db_owner: true password: secret roles: - pgedge_superuser @@ -10585,7 +9986,7 @@ components: - LOGIN - CREATEDB - CREATEROLE - db_owner: false + db_owner: true password: secret roles: - pgedge_superuser @@ -10594,7 +9995,7 @@ components: - LOGIN - CREATEDB - CREATEROLE - db_owner: false + db_owner: true password: secret roles: - pgedge_superuser @@ -10720,6 +10121,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -10756,78 +10158,84 @@ components: source_database_name: northwind source_node_name: n1 source_node: n1 - minItems: 1 - maxItems: 9 - orchestrator_opts: - $ref: '#/components/schemas/OrchestratorOpts' - patroni_port: - type: integer - description: 'The port used by Patroni for this database. If the port is 0, each instance will be assigned a random port. NOTE: This field is not currently supported for Docker Swarm.' - example: 8888 - format: int64 - minimum: 0 - maximum: 65535 - pg_hba_conf: - type: array - items: - type: string - example: Nisi nihil corporis perspiciatis et. - description: Additional pg_hba.conf entries, one rule per array element. Inserted between control-plane's system-user rules and its catch-all, so they cannot affect control-plane-internal connectivity (Patroni, replication, health checks). Node-level pg_hba_conf entries are prepended to these. - example: - - hostssl all myapp_user 203.0.113.0/24 scram-sha-256 - - hostssl all alice 0.0.0.0/0 cert clientcert=verify-full map=ssl_users - pg_ident_conf: - type: array - items: - type: string - example: Blanditiis et accusamus repellat fuga occaecati. - description: Additional pg_ident.conf entries, one mapping per array element. Purely additive; control-plane writes no pg_ident entries of its own. The primary use case is cert auth with map= translating certificate CNs to PostgreSQL usernames. - example: - - ssl_users CN=alice,O=example alice - port: - type: integer - description: The port used by the Postgres database. If the port is 0, each instance will be assigned a random port. If the port is unspecified, the database will not be exposed on any port, dependent on orchestrator support for that feature. - example: 5432 - format: int64 - minimum: 0 - maximum: 65535 - postgres_version: - type: string - description: The Postgres version in 'major.minor' format. - example: "17.6" - pattern: ^\d{2}\.\d{1,2}$ - postgresql_conf: - type: object - description: Additional postgresql.conf settings. Will be merged with the settings provided by control-plane. - example: - max_connections: 1000 - maxLength: 64 - additionalProperties: true - restore_config: - $ref: '#/components/schemas/RestoreConfigSpec' - scripts: - $ref: '#/components/schemas/DatabaseScripts' - services: - type: array - items: - $ref: '#/components/schemas/ServiceSpec3' - description: Service instances to run alongside the database (e.g., MCP servers). - example: - - config: - llm_model: gpt-4 - llm_provider: openai - openai_api_key: sk-... - connect_as: app + - backup_config: + repositories: + - azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + storage-upload-chunk-size: 5MiB + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + retention_full: 2 + retention_full_type: count + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 + - azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + storage-upload-chunk-size: 5MiB + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + retention_full: 2 + retention_full_type: count + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 + - azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + storage-upload-chunk-size: 5MiB + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + retention_full: 2 + retention_full_type: count + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 + schedules: + - cron_expression: 0 6 * * ? + id: daily-full-backup + type: full + - cron_expression: 0 6 * * ? + id: daily-full-backup + type: full + - cron_expression: 0 6 * * ? + id: daily-full-backup + type: full cpus: 500m - database_connection: - target_nodes: - - n1 - - n2 - target_session_attrs: primary host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 - memory: 512M + memory: 500M + name: n1 orchestrator_opts: swarm: extra_labels: @@ -10859,25 +10267,121 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host - port: 0 - service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - service_type: rag - version: latest - - config: - llm_model: gpt-4 - llm_provider: openai - openai_api_key: sk-... - connect_as: app + image: Dignissimos incidunt in quas totam eveniet possimus. + patroni_port: 8888 + pg_hba_conf: + - host example myapp_user 10.0.0.0/8 scram-sha-256 + pg_ident_conf: + - ssl_users CN=alice,O=example alice + port: 5432 + postgres_version: "17.6" + postgresql_conf: + max_connections: 1000 + restore_config: + repository: + azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 + restore_options: + set: 20250505-153628F + target: "123456" + type: xid + source_database_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + source_database_name: northwind + source_node_name: n1 + source_node: n1 + - backup_config: + repositories: + - azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + storage-upload-chunk-size: 5MiB + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + retention_full: 2 + retention_full_type: count + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 + - azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + storage-upload-chunk-size: 5MiB + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + retention_full: 2 + retention_full_type: count + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 + - azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + storage-upload-chunk-size: 5MiB + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + retention_full: 2 + retention_full_type: count + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 + schedules: + - cron_expression: 0 6 * * ? + id: daily-full-backup + type: full + - cron_expression: 0 6 * * ? + id: daily-full-backup + type: full + - cron_expression: 0 6 * * ? + id: daily-full-backup + type: full cpus: 500m - database_connection: - target_nodes: - - n1 - - n2 - target_session_attrs: primary host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 - memory: 512M + memory: 500M + name: n1 orchestrator_opts: swarm: extra_labels: @@ -10909,56 +10413,200 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host - port: 0 - service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - service_type: rag - version: latest - - config: - llm_model: gpt-4 - llm_provider: openai - openai_api_key: sk-... - connect_as: app - cpus: 500m - database_connection: - target_nodes: - - n1 - - n2 - target_session_attrs: primary - host_ids: - - 76f9b8c0-4958-11f0-a489-3bb29577c696 - - 76f9b8c0-4958-11f0-a489-3bb29577c696 - memory: 512M - orchestrator_opts: - swarm: - extra_labels: - traefik.enable: "true" - traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) - extra_networks: - - aliases: - - pg-db - - db-alias - driver_opts: - com.docker.network.endpoint.expose: "true" - id: traefik-public - - aliases: - - pg-db - - db-alias - driver_opts: - com.docker.network.endpoint.expose: "true" - id: traefik-public - - aliases: - - pg-db - - db-alias - driver_opts: - com.docker.network.endpoint.expose: "true" - id: traefik-public - extra_volumes: - - destination_path: /backups/container - host_path: /Users/user/backups/host - - destination_path: /backups/container - host_path: /Users/user/backups/host - - destination_path: /backups/container + image: Dignissimos incidunt in quas totam eveniet possimus. + patroni_port: 8888 + pg_hba_conf: + - host example myapp_user 10.0.0.0/8 scram-sha-256 + pg_ident_conf: + - ssl_users CN=alice,O=example alice + port: 5432 + postgres_version: "17.6" + postgresql_conf: + max_connections: 1000 + restore_config: + repository: + azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 + restore_options: + set: 20250505-153628F + target: "123456" + type: xid + source_database_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + source_database_name: northwind + source_node_name: n1 + source_node: n1 + minItems: 1 + maxItems: 9 + orchestrator_opts: + $ref: '#/components/schemas/OrchestratorOpts' + patroni_port: + type: integer + description: 'The port used by Patroni for this database. If the port is 0, each instance will be assigned a random port. NOTE: This field is not currently supported for Docker Swarm.' + example: 8888 + format: int64 + minimum: 0 + maximum: 65535 + pg_hba_conf: + type: array + items: + type: string + example: Eaque et. + description: Additional pg_hba.conf entries, one rule per array element. Inserted between control-plane's system-user rules and its catch-all, so they cannot affect control-plane-internal connectivity (Patroni, replication, health checks). Node-level pg_hba_conf entries are prepended to these. + example: + - hostssl all myapp_user 203.0.113.0/24 scram-sha-256 + - hostssl all alice 0.0.0.0/0 cert clientcert=verify-full map=ssl_users + pg_ident_conf: + type: array + items: + type: string + example: Minima ipsum ut impedit quo. + description: Additional pg_ident.conf entries, one mapping per array element. Purely additive; control-plane writes no pg_ident entries of its own. The primary use case is cert auth with map= translating certificate CNs to PostgreSQL usernames. + example: + - ssl_users CN=alice,O=example alice + port: + type: integer + description: The port used by the Postgres database. If the port is 0, each instance will be assigned a random port. If the port is unspecified, the database will not be exposed on any port, dependent on orchestrator support for that feature. + example: 5432 + format: int64 + minimum: 0 + maximum: 65535 + postgres_version: + type: string + description: The Postgres version in 'major.minor' format. + example: "17.6" + pattern: ^\d{2}\.\d{1,2}$ + postgresql_conf: + type: object + description: Additional postgresql.conf settings. Will be merged with the settings provided by control-plane. + example: + max_connections: 1000 + maxLength: 64 + additionalProperties: true + restore_config: + $ref: '#/components/schemas/RestoreConfigSpec' + scripts: + $ref: '#/components/schemas/DatabaseScripts' + services: + type: array + items: + $ref: '#/components/schemas/ServiceSpec3' + description: Service instances to run alongside the database (e.g., MCP servers). + example: + - config: + llm_model: gpt-4 + llm_provider: openai + openai_api_key: sk-... + connect_as: app + cpus: 500m + database_connection: + target_nodes: + - n1 + - n2 + target_session_attrs: primary + host_ids: + - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 + memory: 512M + orchestrator_opts: + swarm: + extra_labels: + traefik.enable: "true" + traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) + extra_networks: + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + extra_volumes: + - destination_path: /backups/container + host_path: /Users/user/backups/host + - destination_path: /backups/container + host_path: /Users/user/backups/host + - destination_path: /backups/container + host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. + port: 0 + service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + service_type: rag + version: latest + - config: + llm_model: gpt-4 + llm_provider: openai + openai_api_key: sk-... + connect_as: app + cpus: 500m + database_connection: + target_nodes: + - n1 + - n2 + target_session_attrs: primary + host_ids: + - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 + memory: 512M + orchestrator_opts: + swarm: + extra_labels: + traefik.enable: "true" + traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) + extra_networks: + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + extra_volumes: + - destination_path: /backups/container host_path: /Users/user/backups/host + - destination_path: /backups/container + host_path: /Users/user/backups/host + - destination_path: /backups/container + host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -11048,7 +10696,7 @@ components: - LOGIN - CREATEDB - CREATEROLE - db_owner: false + db_owner: true password: secret roles: - pgedge_superuser @@ -11057,7 +10705,7 @@ components: - LOGIN - CREATEDB - CREATEROLE - db_owner: false + db_owner: true password: secret roles: - pgedge_superuser @@ -11066,7 +10714,7 @@ components: - LOGIN - CREATEDB - CREATEROLE - db_owner: false + db_owner: true password: secret roles: - pgedge_superuser @@ -11182,6 +10830,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -11327,6 +10976,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -11394,6 +11044,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. patroni_port: 8888 pg_hba_conf: - hostssl all myapp_user 203.0.113.0/24 scram-sha-256 @@ -11454,6 +11105,7 @@ components: host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -11486,6 +11138,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -11504,6 +11157,7 @@ components: host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -11536,6 +11190,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -11570,7 +11225,7 @@ components: - LOGIN - CREATEDB - CREATEROLE - db_owner: false + db_owner: true password: secret roles: - pgedge_superuser @@ -11579,7 +11234,7 @@ components: - LOGIN - CREATEDB - CREATEROLE - db_owner: false + db_owner: true password: secret roles: - pgedge_superuser @@ -11588,7 +11243,7 @@ components: - LOGIN - CREATEDB - CREATEROLE - db_owner: false + db_owner: true password: secret roles: - pgedge_superuser @@ -11714,6 +11369,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -11750,78 +11406,84 @@ components: source_database_name: northwind source_node_name: n1 source_node: n1 - minItems: 1 - maxItems: 9 - orchestrator_opts: - $ref: '#/components/schemas/OrchestratorOpts' - patroni_port: - type: integer - description: 'The port used by Patroni for this database. If the port is 0, each instance will be assigned a random port. NOTE: This field is not currently supported for Docker Swarm.' - example: 8888 - format: int64 - minimum: 0 - maximum: 65535 - pg_hba_conf: - type: array - items: - type: string - example: Dignissimos voluptas vel earum eaque. - description: Additional pg_hba.conf entries, one rule per array element. Inserted between control-plane's system-user rules and its catch-all, so they cannot affect control-plane-internal connectivity (Patroni, replication, health checks). Node-level pg_hba_conf entries are prepended to these. - example: - - hostssl all myapp_user 203.0.113.0/24 scram-sha-256 - - hostssl all alice 0.0.0.0/0 cert clientcert=verify-full map=ssl_users - pg_ident_conf: - type: array - items: - type: string - example: Et minima ipsum ut impedit. - description: Additional pg_ident.conf entries, one mapping per array element. Purely additive; control-plane writes no pg_ident entries of its own. The primary use case is cert auth with map= translating certificate CNs to PostgreSQL usernames. - example: - - ssl_users CN=alice,O=example alice - port: - type: integer - description: The port used by the Postgres database. If the port is 0, each instance will be assigned a random port. If the port is unspecified, the database will not be exposed on any port, dependent on orchestrator support for that feature. - example: 5432 - format: int64 - minimum: 0 - maximum: 65535 - postgres_version: - type: string - description: The Postgres version in 'major.minor' format. - example: "17.6" - pattern: ^\d{2}\.\d{1,2}$ - postgresql_conf: - type: object - description: Additional postgresql.conf settings. Will be merged with the settings provided by control-plane. - example: - max_connections: 1000 - maxLength: 64 - additionalProperties: true - restore_config: - $ref: '#/components/schemas/RestoreConfigSpec' - scripts: - $ref: '#/components/schemas/DatabaseScripts' - services: - type: array - items: - $ref: '#/components/schemas/ServiceSpec4' - description: Service instances to run alongside the database (e.g., MCP servers). - example: - - config: - llm_model: gpt-4 - llm_provider: openai - openai_api_key: sk-... - connect_as: app + - backup_config: + repositories: + - azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + storage-upload-chunk-size: 5MiB + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + retention_full: 2 + retention_full_type: count + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 + - azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + storage-upload-chunk-size: 5MiB + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + retention_full: 2 + retention_full_type: count + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 + - azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + storage-upload-chunk-size: 5MiB + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + retention_full: 2 + retention_full_type: count + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 + schedules: + - cron_expression: 0 6 * * ? + id: daily-full-backup + type: full + - cron_expression: 0 6 * * ? + id: daily-full-backup + type: full + - cron_expression: 0 6 * * ? + id: daily-full-backup + type: full cpus: 500m - database_connection: - target_nodes: - - n1 - - n2 - target_session_attrs: primary host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 - memory: 512M + memory: 500M + name: n1 orchestrator_opts: swarm: extra_labels: @@ -11853,10 +11515,100 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host - port: 0 - service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - service_type: rag - version: latest + image: Dignissimos incidunt in quas totam eveniet possimus. + patroni_port: 8888 + pg_hba_conf: + - host example myapp_user 10.0.0.0/8 scram-sha-256 + pg_ident_conf: + - ssl_users CN=alice,O=example alice + port: 5432 + postgres_version: "17.6" + postgresql_conf: + max_connections: 1000 + restore_config: + repository: + azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 + restore_options: + set: 20250505-153628F + target: "123456" + type: xid + source_database_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + source_database_name: northwind + source_node_name: n1 + source_node: n1 + minItems: 1 + maxItems: 9 + orchestrator_opts: + $ref: '#/components/schemas/OrchestratorOpts' + patroni_port: + type: integer + description: 'The port used by Patroni for this database. If the port is 0, each instance will be assigned a random port. NOTE: This field is not currently supported for Docker Swarm.' + example: 8888 + format: int64 + minimum: 0 + maximum: 65535 + pg_hba_conf: + type: array + items: + type: string + example: Dolorum natus sunt harum magnam sunt. + description: Additional pg_hba.conf entries, one rule per array element. Inserted between control-plane's system-user rules and its catch-all, so they cannot affect control-plane-internal connectivity (Patroni, replication, health checks). Node-level pg_hba_conf entries are prepended to these. + example: + - hostssl all myapp_user 203.0.113.0/24 scram-sha-256 + - hostssl all alice 0.0.0.0/0 cert clientcert=verify-full map=ssl_users + pg_ident_conf: + type: array + items: + type: string + example: In veniam officia ratione. + description: Additional pg_ident.conf entries, one mapping per array element. Purely additive; control-plane writes no pg_ident entries of its own. The primary use case is cert auth with map= translating certificate CNs to PostgreSQL usernames. + example: + - ssl_users CN=alice,O=example alice + port: + type: integer + description: The port used by the Postgres database. If the port is 0, each instance will be assigned a random port. If the port is unspecified, the database will not be exposed on any port, dependent on orchestrator support for that feature. + example: 5432 + format: int64 + minimum: 0 + maximum: 65535 + postgres_version: + type: string + description: The Postgres version in 'major.minor' format. + example: "17.6" + pattern: ^\d{2}\.\d{1,2}$ + postgresql_conf: + type: object + description: Additional postgresql.conf settings. Will be merged with the settings provided by control-plane. + example: + max_connections: 1000 + maxLength: 64 + additionalProperties: true + restore_config: + $ref: '#/components/schemas/RestoreConfigSpec' + scripts: + $ref: '#/components/schemas/DatabaseScripts' + services: + type: array + items: + $ref: '#/components/schemas/ServiceSpec4' + description: Service instances to run alongside the database (e.g., MCP servers). + example: - config: llm_model: gpt-4 llm_provider: openai @@ -11871,55 +11623,6 @@ components: host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 - memory: 512M - orchestrator_opts: - swarm: - extra_labels: - traefik.enable: "true" - traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) - extra_networks: - - aliases: - - pg-db - - db-alias - driver_opts: - com.docker.network.endpoint.expose: "true" - id: traefik-public - - aliases: - - pg-db - - db-alias - driver_opts: - com.docker.network.endpoint.expose: "true" - id: traefik-public - - aliases: - - pg-db - - db-alias - driver_opts: - com.docker.network.endpoint.expose: "true" - id: traefik-public - extra_volumes: - - destination_path: /backups/container - host_path: /Users/user/backups/host - - destination_path: /backups/container - host_path: /Users/user/backups/host - - destination_path: /backups/container - host_path: /Users/user/backups/host - port: 0 - service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - service_type: rag - version: latest - - config: - llm_model: gpt-4 - llm_provider: openai - openai_api_key: sk-... - connect_as: app - cpus: 500m - database_connection: - target_nodes: - - n1 - - n2 - target_session_attrs: primary - host_ids: - - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: @@ -11953,6 +11656,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -11971,6 +11675,7 @@ components: host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -12003,6 +11708,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -12092,7 +11798,7 @@ components: - LOGIN - CREATEDB - CREATEROLE - db_owner: false + db_owner: true password: secret roles: - pgedge_superuser @@ -12101,7 +11807,7 @@ components: - LOGIN - CREATEDB - CREATEROLE - db_owner: false + db_owner: true password: secret roles: - pgedge_superuser @@ -12110,7 +11816,7 @@ components: - LOGIN - CREATEDB - CREATEROLE - db_owner: false + db_owner: true password: secret roles: - pgedge_superuser @@ -12226,6 +11932,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -12371,6 +12078,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -12516,6 +12224,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -12583,6 +12292,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. patroni_port: 8888 pg_hba_conf: - hostssl all myapp_user 203.0.113.0/24 scram-sha-256 @@ -12643,6 +12353,7 @@ components: host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -12675,6 +12386,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -12693,6 +12405,7 @@ components: host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -12725,6 +12438,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -12743,6 +12457,7 @@ components: host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -12775,6 +12490,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -12793,6 +12509,7 @@ components: host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -12825,6 +12542,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -12859,7 +12577,7 @@ components: - LOGIN - CREATEDB - CREATEROLE - db_owner: false + db_owner: true password: secret roles: - pgedge_superuser @@ -12868,7 +12586,7 @@ components: - LOGIN - CREATEDB - CREATEROLE - db_owner: false + db_owner: true password: secret roles: - pgedge_superuser @@ -12877,7 +12595,7 @@ components: - LOGIN - CREATEDB - CREATEROLE - db_owner: false + db_owner: true password: secret roles: - pgedge_superuser @@ -12936,15 +12654,120 @@ components: s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 - - azure_account: pgedge-backups - azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - azure_endpoint: blob.core.usgovcloudapi.net - azure_key: YXpLZXk= - base_path: /backups - custom_options: - s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab - storage-upload-chunk-size: 5MiB - gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + schedules: + - cron_expression: 0 6 * * ? + id: daily-full-backup + type: full + - cron_expression: 0 6 * * ? + id: daily-full-backup + type: full + - cron_expression: 0 6 * * ? + id: daily-full-backup + type: full + cpus: 500m + host_ids: + - 76f9b8c0-4958-11f0-a489-3bb29577c696 + memory: 500M + name: n1 + orchestrator_opts: + swarm: + extra_labels: + traefik.enable: "true" + traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) + extra_networks: + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + extra_volumes: + - destination_path: /backups/container + host_path: /Users/user/backups/host + - destination_path: /backups/container + host_path: /Users/user/backups/host + - destination_path: /backups/container + host_path: /Users/user/backups/host + image: Quia reiciendis et odio omnis itaque cum. + patroni_port: 8888 + pg_hba_conf: + - host example myapp_user 10.0.0.0/8 scram-sha-256 + pg_ident_conf: + - ssl_users CN=alice,O=example alice + port: 5432 + postgres_version: "17.6" + postgresql_conf: + max_connections: 1000 + restore_config: + repository: + azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 + restore_options: + set: 20250505-153628F + target: "123456" + type: xid + source_database_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + source_database_name: northwind + source_node_name: n1 + source_node: n1 + - backup_config: + repositories: + - azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + storage-upload-chunk-size: 5MiB + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + retention_full: 2 + retention_full_type: count + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 + - azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + storage-upload-chunk-size: 5MiB + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 gcs_endpoint: localhost gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== id: 76f9b8c0-4958-11f0-a489-3bb29577c696 @@ -12969,6 +12792,130 @@ components: cpus: 500m host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 + memory: 500M + name: n1 + orchestrator_opts: + swarm: + extra_labels: + traefik.enable: "true" + traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) + extra_networks: + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + extra_volumes: + - destination_path: /backups/container + host_path: /Users/user/backups/host + - destination_path: /backups/container + host_path: /Users/user/backups/host + - destination_path: /backups/container + host_path: /Users/user/backups/host + image: Quia reiciendis et odio omnis itaque cum. + patroni_port: 8888 + pg_hba_conf: + - host example myapp_user 10.0.0.0/8 scram-sha-256 + pg_ident_conf: + - ssl_users CN=alice,O=example alice + port: 5432 + postgres_version: "17.6" + postgresql_conf: + max_connections: 1000 + restore_config: + repository: + azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 + restore_options: + set: 20250505-153628F + target: "123456" + type: xid + source_database_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + source_database_name: northwind + source_node_name: n1 + source_node: n1 + - backup_config: + repositories: + - azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + storage-upload-chunk-size: 5MiB + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + retention_full: 2 + retention_full_type: count + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 + - azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + storage-upload-chunk-size: 5MiB + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + retention_full: 2 + retention_full_type: count + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 + schedules: + - cron_expression: 0 6 * * ? + id: daily-full-backup + type: full + - cron_expression: 0 6 * * ? + id: daily-full-backup + type: full + - cron_expression: 0 6 * * ? + id: daily-full-backup + type: full + cpus: 500m + host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 500M name: n1 @@ -13003,6 +12950,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Quia reiciendis et odio omnis itaque cum. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -13054,7 +13002,7 @@ components: type: array items: type: string - example: Nobis quam sequi. + example: Eveniet sit dignissimos ducimus reiciendis asperiores. description: Additional pg_hba.conf entries, one rule per array element. Inserted between control-plane's system-user rules and its catch-all, so they cannot affect control-plane-internal connectivity (Patroni, replication, health checks). Node-level pg_hba_conf entries are prepended to these. example: - hostssl all myapp_user 203.0.113.0/24 scram-sha-256 @@ -13063,7 +13011,7 @@ components: type: array items: type: string - example: Aliquid porro dolorum natus sunt harum magnam. + example: Veritatis consequuntur molestiae architecto. description: Additional pg_ident.conf entries, one mapping per array element. Purely additive; control-plane writes no pg_ident entries of its own. The primary use case is cert auth with map= translating certificate CNs to PostgreSQL usernames. example: - ssl_users CN=alice,O=example alice @@ -13109,6 +13057,7 @@ components: target_session_attrs: primary host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -13141,6 +13090,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Quia reiciendis et odio omnis itaque cum. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -13158,6 +13108,7 @@ components: target_session_attrs: primary host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -13190,6 +13141,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Quia reiciendis et odio omnis itaque cum. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -13207,6 +13159,7 @@ components: target_session_attrs: primary host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -13239,6 +13192,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Quia reiciendis et odio omnis itaque cum. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -13256,6 +13210,7 @@ components: target_session_attrs: primary host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -13288,6 +13243,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Quia reiciendis et odio omnis itaque cum. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -13340,26 +13296,6 @@ components: s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 - - azure_account: pgedge-backups - azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - azure_endpoint: blob.core.usgovcloudapi.net - azure_key: YXpLZXk= - base_path: /backups - custom_options: - s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab - storage-upload-chunk-size: 5MiB - gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - gcs_endpoint: localhost - gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== - id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - retention_full: 2 - retention_full_type: count - s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - s3_endpoint: s3.us-east-1.amazonaws.com - s3_key: AKIAIOSFODNN7EXAMPLE - s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - s3_region: us-east-1 - type: s3 schedules: - cron_expression: 0 6 * * ? id: daily-full-backup @@ -13377,7 +13313,7 @@ components: - LOGIN - CREATEDB - CREATEROLE - db_owner: false + db_owner: true password: secret roles: - pgedge_superuser @@ -13386,7 +13322,7 @@ components: - LOGIN - CREATEDB - CREATEROLE - db_owner: false + db_owner: true password: secret roles: - pgedge_superuser @@ -13395,7 +13331,7 @@ components: - LOGIN - CREATEDB - CREATEROLE - db_owner: false + db_owner: true password: secret roles: - pgedge_superuser @@ -13444,6 +13380,111 @@ components: s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_region: us-east-1 type: s3 + schedules: + - cron_expression: 0 6 * * ? + id: daily-full-backup + type: full + - cron_expression: 0 6 * * ? + id: daily-full-backup + type: full + - cron_expression: 0 6 * * ? + id: daily-full-backup + type: full + cpus: 500m + host_ids: + - 76f9b8c0-4958-11f0-a489-3bb29577c696 + memory: 500M + name: n1 + orchestrator_opts: + swarm: + extra_labels: + traefik.enable: "true" + traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) + extra_networks: + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + extra_volumes: + - destination_path: /backups/container + host_path: /Users/user/backups/host + - destination_path: /backups/container + host_path: /Users/user/backups/host + - destination_path: /backups/container + host_path: /Users/user/backups/host + image: Quia reiciendis et odio omnis itaque cum. + patroni_port: 8888 + pg_hba_conf: + - host example myapp_user 10.0.0.0/8 scram-sha-256 + pg_ident_conf: + - ssl_users CN=alice,O=example alice + port: 5432 + postgres_version: "17.6" + postgresql_conf: + max_connections: 1000 + restore_config: + repository: + azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 + restore_options: + set: 20250505-153628F + target: "123456" + type: xid + source_database_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + source_database_name: northwind + source_node_name: n1 + source_node: n1 + - backup_config: + repositories: + - azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + storage-upload-chunk-size: 5MiB + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + retention_full: 2 + retention_full_type: count + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 - azure_account: pgedge-backups azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 azure_endpoint: blob.core.usgovcloudapi.net @@ -13477,7 +13518,6 @@ components: cpus: 500m host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 500M name: n1 orchestrator_opts: @@ -13511,6 +13551,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Quia reiciendis et odio omnis itaque cum. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -13578,6 +13619,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Quia reiciendis et odio omnis itaque cum. patroni_port: 8888 pg_hba_conf: - hostssl all myapp_user 203.0.113.0/24 scram-sha-256 @@ -13637,6 +13679,7 @@ components: target_session_attrs: primary host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -13669,6 +13712,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Quia reiciendis et odio omnis itaque cum. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -13686,6 +13730,7 @@ components: target_session_attrs: primary host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -13718,6 +13763,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Quia reiciendis et odio omnis itaque cum. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -13752,7 +13798,7 @@ components: - LOGIN - CREATEDB - CREATEROLE - db_owner: false + db_owner: true password: secret roles: - pgedge_superuser @@ -13761,7 +13807,7 @@ components: - LOGIN - CREATEDB - CREATEROLE - db_owner: false + db_owner: true password: secret roles: - pgedge_superuser @@ -13770,7 +13816,7 @@ components: - LOGIN - CREATEDB - CREATEROLE - db_owner: false + db_owner: true password: secret roles: - pgedge_superuser @@ -13896,6 +13942,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -13947,7 +13994,7 @@ components: type: array items: type: string - example: Nisi eveniet sit dignissimos ducimus. + example: Quas iste dicta assumenda. description: Additional pg_hba.conf entries, one rule per array element. Inserted between control-plane's system-user rules and its catch-all, so they cannot affect control-plane-internal connectivity (Patroni, replication, health checks). Node-level pg_hba_conf entries are prepended to these. example: - hostssl all myapp_user 203.0.113.0/24 scram-sha-256 @@ -13956,7 +14003,7 @@ components: type: array items: type: string - example: Asperiores explicabo. + example: Vero dolorem aut. description: Additional pg_ident.conf entries, one mapping per array element. Purely additive; control-plane writes no pg_ident entries of its own. The primary use case is cert auth with map= translating certificate CNs to PostgreSQL usernames. example: - ssl_users CN=alice,O=example alice @@ -14003,6 +14050,7 @@ components: host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -14035,6 +14083,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -14053,6 +14102,7 @@ components: host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -14085,6 +14135,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -14103,6 +14154,7 @@ components: host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -14135,6 +14187,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -14153,6 +14206,7 @@ components: host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -14185,6 +14239,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -14274,7 +14329,7 @@ components: - LOGIN - CREATEDB - CREATEROLE - db_owner: false + db_owner: true password: secret roles: - pgedge_superuser @@ -14283,7 +14338,7 @@ components: - LOGIN - CREATEDB - CREATEROLE - db_owner: false + db_owner: true password: secret roles: - pgedge_superuser @@ -14292,7 +14347,7 @@ components: - LOGIN - CREATEDB - CREATEROLE - db_owner: false + db_owner: true password: secret roles: - pgedge_superuser @@ -14408,6 +14463,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -14553,6 +14609,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -14620,6 +14677,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. patroni_port: 8888 pg_hba_conf: - hostssl all myapp_user 203.0.113.0/24 scram-sha-256 @@ -14680,6 +14738,59 @@ components: host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 + memory: 512M + orchestrator_opts: + swarm: + extra_labels: + traefik.enable: "true" + traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) + extra_networks: + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + extra_volumes: + - destination_path: /backups/container + host_path: /Users/user/backups/host + - destination_path: /backups/container + host_path: /Users/user/backups/host + - destination_path: /backups/container + host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. + port: 0 + service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + service_type: rag + version: latest + - config: + llm_model: gpt-4 + llm_provider: openai + openai_api_key: sk-... + connect_as: app + cpus: 500m + database_connection: + target_nodes: + - n1 + - n2 + target_session_attrs: primary + host_ids: + - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -14712,6 +14823,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -14730,6 +14842,7 @@ components: host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -14762,6 +14875,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -14780,6 +14894,7 @@ components: host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -14812,6 +14927,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -14846,7 +14962,7 @@ components: - LOGIN - CREATEDB - CREATEROLE - db_owner: false + db_owner: true password: secret roles: - pgedge_superuser @@ -14855,7 +14971,7 @@ components: - LOGIN - CREATEDB - CREATEROLE - db_owner: false + db_owner: true password: secret roles: - pgedge_superuser @@ -14864,7 +14980,7 @@ components: - LOGIN - CREATEDB - CREATEROLE - db_owner: false + db_owner: true password: secret roles: - pgedge_superuser @@ -14990,6 +15106,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -15135,151 +15252,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host - patroni_port: 8888 - pg_hba_conf: - - host example myapp_user 10.0.0.0/8 scram-sha-256 - pg_ident_conf: - - ssl_users CN=alice,O=example alice - port: 5432 - postgres_version: "17.6" - postgresql_conf: - max_connections: 1000 - restore_config: - repository: - azure_account: pgedge-backups - azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - azure_endpoint: blob.core.usgovcloudapi.net - azure_key: YXpLZXk= - base_path: /backups - custom_options: - s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab - gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - gcs_endpoint: localhost - gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== - id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - s3_endpoint: s3.us-east-1.amazonaws.com - s3_key: AKIAIOSFODNN7EXAMPLE - s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - s3_region: us-east-1 - type: s3 - restore_options: - set: 20250505-153628F - target: "123456" - type: xid - source_database_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - source_database_name: northwind - source_node_name: n1 - source_node: n1 - - backup_config: - repositories: - - azure_account: pgedge-backups - azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - azure_endpoint: blob.core.usgovcloudapi.net - azure_key: YXpLZXk= - base_path: /backups - custom_options: - s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab - storage-upload-chunk-size: 5MiB - gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - gcs_endpoint: localhost - gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== - id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - retention_full: 2 - retention_full_type: count - s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - s3_endpoint: s3.us-east-1.amazonaws.com - s3_key: AKIAIOSFODNN7EXAMPLE - s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - s3_region: us-east-1 - type: s3 - - azure_account: pgedge-backups - azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - azure_endpoint: blob.core.usgovcloudapi.net - azure_key: YXpLZXk= - base_path: /backups - custom_options: - s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab - storage-upload-chunk-size: 5MiB - gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - gcs_endpoint: localhost - gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== - id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - retention_full: 2 - retention_full_type: count - s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - s3_endpoint: s3.us-east-1.amazonaws.com - s3_key: AKIAIOSFODNN7EXAMPLE - s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - s3_region: us-east-1 - type: s3 - - azure_account: pgedge-backups - azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - azure_endpoint: blob.core.usgovcloudapi.net - azure_key: YXpLZXk= - base_path: /backups - custom_options: - s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab - storage-upload-chunk-size: 5MiB - gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - gcs_endpoint: localhost - gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== - id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - retention_full: 2 - retention_full_type: count - s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - s3_endpoint: s3.us-east-1.amazonaws.com - s3_key: AKIAIOSFODNN7EXAMPLE - s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - s3_region: us-east-1 - type: s3 - schedules: - - cron_expression: 0 6 * * ? - id: daily-full-backup - type: full - - cron_expression: 0 6 * * ? - id: daily-full-backup - type: full - - cron_expression: 0 6 * * ? - id: daily-full-backup - type: full - cpus: 500m - host_ids: - - 76f9b8c0-4958-11f0-a489-3bb29577c696 - - 76f9b8c0-4958-11f0-a489-3bb29577c696 - memory: 500M - name: n1 - orchestrator_opts: - swarm: - extra_labels: - traefik.enable: "true" - traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) - extra_networks: - - aliases: - - pg-db - - db-alias - driver_opts: - com.docker.network.endpoint.expose: "true" - id: traefik-public - - aliases: - - pg-db - - db-alias - driver_opts: - com.docker.network.endpoint.expose: "true" - id: traefik-public - - aliases: - - pg-db - - db-alias - driver_opts: - com.docker.network.endpoint.expose: "true" - id: traefik-public - extra_volumes: - - destination_path: /backups/container - host_path: /Users/user/backups/host - - destination_path: /backups/container - host_path: /Users/user/backups/host - - destination_path: /backups/container - host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -15331,7 +15304,7 @@ components: type: array items: type: string - example: Et vero dolorem aut. + example: Laudantium sed delectus vel ut. description: Additional pg_hba.conf entries, one rule per array element. Inserted between control-plane's system-user rules and its catch-all, so they cannot affect control-plane-internal connectivity (Patroni, replication, health checks). Node-level pg_hba_conf entries are prepended to these. example: - hostssl all myapp_user 203.0.113.0/24 scram-sha-256 @@ -15340,7 +15313,7 @@ components: type: array items: type: string - example: Omnis quisquam officiis. + example: Expedita maiores cumque esse. description: Additional pg_ident.conf entries, one mapping per array element. Purely additive; control-plane writes no pg_ident entries of its own. The primary use case is cert auth with map= translating certificate CNs to PostgreSQL usernames. example: - ssl_users CN=alice,O=example alice @@ -15387,6 +15360,7 @@ components: host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -15419,6 +15393,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -15437,6 +15412,7 @@ components: host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -15469,410 +15445,225 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag version: latest - spock_version: - type: string - description: The major version of the Spock extension. - example: "5" - pattern: ^\d{1}$ - example: - backup_config: - repositories: - - azure_account: pgedge-backups - azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - azure_endpoint: blob.core.usgovcloudapi.net - azure_key: YXpLZXk= - base_path: /backups - custom_options: - s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab - storage-upload-chunk-size: 5MiB - gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - gcs_endpoint: localhost - gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== - id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - retention_full: 2 - retention_full_type: count - s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - s3_endpoint: s3.us-east-1.amazonaws.com - s3_key: AKIAIOSFODNN7EXAMPLE - s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - s3_region: us-east-1 - type: s3 - - azure_account: pgedge-backups - azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - azure_endpoint: blob.core.usgovcloudapi.net - azure_key: YXpLZXk= - base_path: /backups - custom_options: - s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab - storage-upload-chunk-size: 5MiB - gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - gcs_endpoint: localhost - gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== - id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - retention_full: 2 - retention_full_type: count - s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - s3_endpoint: s3.us-east-1.amazonaws.com - s3_key: AKIAIOSFODNN7EXAMPLE - s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - s3_region: us-east-1 - type: s3 - - azure_account: pgedge-backups - azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - azure_endpoint: blob.core.usgovcloudapi.net - azure_key: YXpLZXk= - base_path: /backups - custom_options: - s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab - storage-upload-chunk-size: 5MiB - gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - gcs_endpoint: localhost - gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== - id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - retention_full: 2 - retention_full_type: count - s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - s3_endpoint: s3.us-east-1.amazonaws.com - s3_key: AKIAIOSFODNN7EXAMPLE - s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - s3_region: us-east-1 - type: s3 - schedules: - - cron_expression: 0 6 * * ? - id: daily-full-backup - type: full - - cron_expression: 0 6 * * ? - id: daily-full-backup - type: full - - cron_expression: 0 6 * * ? - id: daily-full-backup - type: full - cpus: 500m - database_name: northwind - database_users: - - attributes: - - LOGIN - - CREATEDB - - CREATEROLE - db_owner: false - password: secret - roles: - - pgedge_superuser - username: admin - - attributes: - - LOGIN - - CREATEDB - - CREATEROLE - db_owner: false - password: secret - roles: - - pgedge_superuser - username: admin - - attributes: - - LOGIN - - CREATEDB - - CREATEROLE - db_owner: false - password: secret - roles: - - pgedge_superuser - username: admin - memory: 500M - nodes: - - backup_config: - repositories: - - azure_account: pgedge-backups - azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - azure_endpoint: blob.core.usgovcloudapi.net - azure_key: YXpLZXk= - base_path: /backups - custom_options: - s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab - storage-upload-chunk-size: 5MiB - gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - gcs_endpoint: localhost - gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== - id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - retention_full: 2 - retention_full_type: count - s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - s3_endpoint: s3.us-east-1.amazonaws.com - s3_key: AKIAIOSFODNN7EXAMPLE - s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - s3_region: us-east-1 - type: s3 - - azure_account: pgedge-backups - azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - azure_endpoint: blob.core.usgovcloudapi.net - azure_key: YXpLZXk= - base_path: /backups - custom_options: - s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab - storage-upload-chunk-size: 5MiB - gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - gcs_endpoint: localhost - gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== - id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - retention_full: 2 - retention_full_type: count - s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - s3_endpoint: s3.us-east-1.amazonaws.com - s3_key: AKIAIOSFODNN7EXAMPLE - s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - s3_region: us-east-1 - type: s3 - - azure_account: pgedge-backups - azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - azure_endpoint: blob.core.usgovcloudapi.net - azure_key: YXpLZXk= - base_path: /backups - custom_options: - s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab - storage-upload-chunk-size: 5MiB - gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - gcs_endpoint: localhost - gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== - id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - retention_full: 2 - retention_full_type: count - s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - s3_endpoint: s3.us-east-1.amazonaws.com - s3_key: AKIAIOSFODNN7EXAMPLE - s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - s3_region: us-east-1 - type: s3 - schedules: - - cron_expression: 0 6 * * ? - id: daily-full-backup - type: full - - cron_expression: 0 6 * * ? - id: daily-full-backup - type: full - - cron_expression: 0 6 * * ? - id: daily-full-backup - type: full - cpus: 500m - host_ids: - - 76f9b8c0-4958-11f0-a489-3bb29577c696 - - 76f9b8c0-4958-11f0-a489-3bb29577c696 - memory: 500M - name: n1 - orchestrator_opts: - swarm: - extra_labels: - traefik.enable: "true" - traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) - extra_networks: - - aliases: - - pg-db - - db-alias - driver_opts: - com.docker.network.endpoint.expose: "true" - id: traefik-public - - aliases: - - pg-db - - db-alias - driver_opts: - com.docker.network.endpoint.expose: "true" - id: traefik-public - - aliases: - - pg-db - - db-alias - driver_opts: - com.docker.network.endpoint.expose: "true" - id: traefik-public - extra_volumes: - - destination_path: /backups/container - host_path: /Users/user/backups/host - - destination_path: /backups/container - host_path: /Users/user/backups/host - - destination_path: /backups/container - host_path: /Users/user/backups/host - patroni_port: 8888 - pg_hba_conf: - - host example myapp_user 10.0.0.0/8 scram-sha-256 - pg_ident_conf: - - ssl_users CN=alice,O=example alice - port: 5432 - postgres_version: "17.6" - postgresql_conf: - max_connections: 1000 - restore_config: - repository: - azure_account: pgedge-backups - azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - azure_endpoint: blob.core.usgovcloudapi.net - azure_key: YXpLZXk= - base_path: /backups - custom_options: - s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab - gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - gcs_endpoint: localhost - gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== - id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - s3_endpoint: s3.us-east-1.amazonaws.com - s3_key: AKIAIOSFODNN7EXAMPLE - s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - s3_region: us-east-1 - type: s3 - restore_options: - set: 20250505-153628F - target: "123456" - type: xid - source_database_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - source_database_name: northwind - source_node_name: n1 - source_node: n1 - - backup_config: - repositories: - - azure_account: pgedge-backups - azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - azure_endpoint: blob.core.usgovcloudapi.net - azure_key: YXpLZXk= - base_path: /backups - custom_options: - s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab - storage-upload-chunk-size: 5MiB - gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - gcs_endpoint: localhost - gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== - id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - retention_full: 2 - retention_full_type: count - s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - s3_endpoint: s3.us-east-1.amazonaws.com - s3_key: AKIAIOSFODNN7EXAMPLE - s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - s3_region: us-east-1 - type: s3 - - azure_account: pgedge-backups - azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - azure_endpoint: blob.core.usgovcloudapi.net - azure_key: YXpLZXk= - base_path: /backups - custom_options: - s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab - storage-upload-chunk-size: 5MiB - gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - gcs_endpoint: localhost - gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== - id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - retention_full: 2 - retention_full_type: count - s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - s3_endpoint: s3.us-east-1.amazonaws.com - s3_key: AKIAIOSFODNN7EXAMPLE - s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - s3_region: us-east-1 - type: s3 - - azure_account: pgedge-backups - azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - azure_endpoint: blob.core.usgovcloudapi.net - azure_key: YXpLZXk= - base_path: /backups - custom_options: - s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab - storage-upload-chunk-size: 5MiB - gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - gcs_endpoint: localhost - gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== - id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - retention_full: 2 - retention_full_type: count - s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - s3_endpoint: s3.us-east-1.amazonaws.com - s3_key: AKIAIOSFODNN7EXAMPLE - s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - s3_region: us-east-1 - type: s3 - schedules: - - cron_expression: 0 6 * * ? - id: daily-full-backup - type: full - - cron_expression: 0 6 * * ? - id: daily-full-backup - type: full - - cron_expression: 0 6 * * ? - id: daily-full-backup - type: full - cpus: 500m - host_ids: - - 76f9b8c0-4958-11f0-a489-3bb29577c696 - - 76f9b8c0-4958-11f0-a489-3bb29577c696 - memory: 500M - name: n1 - orchestrator_opts: - swarm: - extra_labels: - traefik.enable: "true" - traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) - extra_networks: - - aliases: - - pg-db - - db-alias - driver_opts: - com.docker.network.endpoint.expose: "true" - id: traefik-public - - aliases: - - pg-db - - db-alias - driver_opts: - com.docker.network.endpoint.expose: "true" - id: traefik-public - - aliases: - - pg-db - - db-alias - driver_opts: - com.docker.network.endpoint.expose: "true" - id: traefik-public - extra_volumes: - - destination_path: /backups/container - host_path: /Users/user/backups/host - - destination_path: /backups/container - host_path: /Users/user/backups/host - - destination_path: /backups/container - host_path: /Users/user/backups/host - patroni_port: 8888 - pg_hba_conf: - - host example myapp_user 10.0.0.0/8 scram-sha-256 - pg_ident_conf: - - ssl_users CN=alice,O=example alice - port: 5432 - postgres_version: "17.6" - postgresql_conf: - max_connections: 1000 - restore_config: - repository: - azure_account: pgedge-backups - azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - azure_endpoint: blob.core.usgovcloudapi.net - azure_key: YXpLZXk= - base_path: /backups - custom_options: - s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab - gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - gcs_endpoint: localhost - gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== - id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 - s3_endpoint: s3.us-east-1.amazonaws.com - s3_key: AKIAIOSFODNN7EXAMPLE - s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - s3_region: us-east-1 - type: s3 - restore_options: - set: 20250505-153628F - target: "123456" - type: xid - source_database_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - source_database_name: northwind - source_node_name: n1 - source_node: n1 + - config: + llm_model: gpt-4 + llm_provider: openai + openai_api_key: sk-... + connect_as: app + cpus: 500m + database_connection: + target_nodes: + - n1 + - n2 + target_session_attrs: primary + host_ids: + - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 + memory: 512M + orchestrator_opts: + swarm: + extra_labels: + traefik.enable: "true" + traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) + extra_networks: + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + extra_volumes: + - destination_path: /backups/container + host_path: /Users/user/backups/host + - destination_path: /backups/container + host_path: /Users/user/backups/host + - destination_path: /backups/container + host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. + port: 0 + service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + service_type: rag + version: latest + - config: + llm_model: gpt-4 + llm_provider: openai + openai_api_key: sk-... + connect_as: app + cpus: 500m + database_connection: + target_nodes: + - n1 + - n2 + target_session_attrs: primary + host_ids: + - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 + memory: 512M + orchestrator_opts: + swarm: + extra_labels: + traefik.enable: "true" + traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) + extra_networks: + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + extra_volumes: + - destination_path: /backups/container + host_path: /Users/user/backups/host + - destination_path: /backups/container + host_path: /Users/user/backups/host + - destination_path: /backups/container + host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. + port: 0 + service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + service_type: rag + version: latest + spock_version: + type: string + description: The major version of the Spock extension. + example: "5" + pattern: ^\d{1}$ + example: + backup_config: + repositories: + - azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + storage-upload-chunk-size: 5MiB + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + retention_full: 2 + retention_full_type: count + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 + - azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + storage-upload-chunk-size: 5MiB + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + retention_full: 2 + retention_full_type: count + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 + - azure_account: pgedge-backups + azure_container: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + azure_endpoint: blob.core.usgovcloudapi.net + azure_key: YXpLZXk= + base_path: /backups + custom_options: + s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab + storage-upload-chunk-size: 5MiB + gcs_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + gcs_endpoint: localhost + gcs_key: ZXhhbXBsZSBnY3Mga2V5Cg== + id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + retention_full: 2 + retention_full_type: count + s3_bucket: pgedge-backups-9f81786f-373b-4ff2-afee-e054a06a96f1 + s3_endpoint: s3.us-east-1.amazonaws.com + s3_key: AKIAIOSFODNN7EXAMPLE + s3_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + s3_region: us-east-1 + type: s3 + schedules: + - cron_expression: 0 6 * * ? + id: daily-full-backup + type: full + - cron_expression: 0 6 * * ? + id: daily-full-backup + type: full + - cron_expression: 0 6 * * ? + id: daily-full-backup + type: full + cpus: 500m + database_name: northwind + database_users: + - attributes: + - LOGIN + - CREATEDB + - CREATEROLE + db_owner: true + password: secret + roles: + - pgedge_superuser + username: admin + - attributes: + - LOGIN + - CREATEDB + - CREATEROLE + db_owner: true + password: secret + roles: + - pgedge_superuser + username: admin + - attributes: + - LOGIN + - CREATEDB + - CREATEROLE + db_owner: true + password: secret + roles: + - pgedge_superuser + username: admin + memory: 500M + nodes: - backup_config: repositories: - azure_account: pgedge-backups @@ -15982,6 +15773,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. patroni_port: 8888 pg_hba_conf: - host example myapp_user 10.0.0.0/8 scram-sha-256 @@ -16049,6 +15841,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. patroni_port: 8888 pg_hba_conf: - hostssl all myapp_user 203.0.113.0/24 scram-sha-256 @@ -16109,6 +15902,7 @@ components: host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -16141,6 +15935,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -16159,6 +15954,7 @@ components: host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -16174,121 +15970,58 @@ components: id: traefik-public - aliases: - pg-db - - db-alias - driver_opts: - com.docker.network.endpoint.expose: "true" - id: traefik-public - - aliases: - - pg-db - - db-alias - driver_opts: - com.docker.network.endpoint.expose: "true" - id: traefik-public - extra_volumes: - - destination_path: /backups/container - host_path: /Users/user/backups/host - - destination_path: /backups/container - host_path: /Users/user/backups/host - - destination_path: /backups/container - host_path: /Users/user/backups/host - port: 0 - service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 - service_type: rag - version: latest - spock_version: "5" - required: - - database_name - - nodes - DatabaseSummary: - type: object - properties: - created_at: - type: string - description: The time that the database was created. - example: "2025-01-01T01:30:00Z" - format: date-time - id: - type: string - description: A user-specified identifier. Must be 1-36 characters, contain only lower-cased letters and hyphens, start and end with a letter or number, and not contain consecutive hyphens. - example: 76f9b8c0-4958-11f0-a489-3bb29577c696 - minLength: 1 - maxLength: 36 - instances: - type: array - items: - $ref: '#/components/schemas/Instance' - description: All of the instances in the database. - example: - - connection_info: - addresses: - - 10.24.34.2 - - i-0123456789abcdef.ec2.internal - port: 5432 - created_at: "2001-11-21T07:07:15Z" - error: 'failed to get patroni status: connection refused' - host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec - id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d - node_name: n1 - postgres: - patroni_paused: true - patroni_state: unknown - pending_restart: false - role: primary - version: "18.1" - spock: - read_only: "off" - subscriptions: - - name: sub_n1n2 - provider_node: n2 - status: down - - name: sub_n1n2 - provider_node: n2 - status: down - - name: sub_n1n2 - provider_node: n2 - status: down - version: 4.10.0 - state: degraded - status_updated_at: "1990-07-23T01:22:30Z" - updated_at: "2013-01-29T23:51:44Z" - - connection_info: - addresses: - - 10.24.34.2 - - i-0123456789abcdef.ec2.internal - port: 5432 - created_at: "2001-11-21T07:07:15Z" - error: 'failed to get patroni status: connection refused' - host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec - id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d - node_name: n1 - postgres: - patroni_paused: true - patroni_state: unknown - pending_restart: false - role: primary - version: "18.1" - spock: - read_only: "off" - subscriptions: - - name: sub_n1n2 - provider_node: n2 - status: down - - name: sub_n1n2 - provider_node: n2 - status: down - - name: sub_n1n2 - provider_node: n2 - status: down - version: 4.10.0 - state: degraded - status_updated_at: "1990-07-23T01:22:30Z" - updated_at: "2013-01-29T23:51:44Z" + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + - aliases: + - pg-db + - db-alias + driver_opts: + com.docker.network.endpoint.expose: "true" + id: traefik-public + extra_volumes: + - destination_path: /backups/container + host_path: /Users/user/backups/host + - destination_path: /backups/container + host_path: /Users/user/backups/host + - destination_path: /backups/container + host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. + port: 0 + service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 + service_type: rag + version: latest + spock_version: "5" + required: + - database_name + - nodes + DatabaseSummary: + type: object + properties: + created_at: + type: string + description: The time that the database was created. + example: "2025-01-01T01:30:00Z" + format: date-time + id: + type: string + description: A user-specified identifier. Must be 1-36 characters, contain only lower-cased letters and hyphens, start and end with a letter or number, and not contain consecutive hyphens. + example: 76f9b8c0-4958-11f0-a489-3bb29577c696 + minLength: 1 + maxLength: 36 + instances: + type: array + items: + $ref: '#/components/schemas/Instance' + description: All of the instances in the database. + example: - connection_info: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 - created_at: "2001-11-21T07:07:15Z" + created_at: "1984-01-30T10:40:13Z" error: 'failed to get patroni status: connection refused' host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d @@ -16296,7 +16029,7 @@ components: postgres: patroni_paused: true patroni_state: unknown - pending_restart: false + pending_restart: true role: primary version: "18.1" spock: @@ -16312,15 +16045,15 @@ components: provider_node: n2 status: down version: 4.10.0 - state: degraded - status_updated_at: "1990-07-23T01:22:30Z" - updated_at: "2013-01-29T23:51:44Z" + state: modifying + status_updated_at: "1976-03-01T20:13:25Z" + updated_at: "1996-05-27T17:04:41Z" - connection_info: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 - created_at: "2001-11-21T07:07:15Z" + created_at: "1984-01-30T10:40:13Z" error: 'failed to get patroni status: connection refused' host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d @@ -16328,7 +16061,7 @@ components: postgres: patroni_paused: true patroni_state: unknown - pending_restart: false + pending_restart: true role: primary version: "18.1" spock: @@ -16344,13 +16077,13 @@ components: provider_node: n2 status: down version: 4.10.0 - state: degraded - status_updated_at: "1990-07-23T01:22:30Z" - updated_at: "2013-01-29T23:51:44Z" + state: modifying + status_updated_at: "1976-03-01T20:13:25Z" + updated_at: "1996-05-27T17:04:41Z" state: type: string description: Current state of the database. - example: degraded + example: creating enum: - creating - modifying @@ -16381,7 +16114,71 @@ components: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 - created_at: "2001-11-21T07:07:15Z" + created_at: "1984-01-30T10:40:13Z" + error: 'failed to get patroni status: connection refused' + host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec + id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d + node_name: n1 + postgres: + patroni_paused: true + patroni_state: unknown + pending_restart: true + role: primary + version: "18.1" + spock: + read_only: "off" + subscriptions: + - name: sub_n1n2 + provider_node: n2 + status: down + - name: sub_n1n2 + provider_node: n2 + status: down + - name: sub_n1n2 + provider_node: n2 + status: down + version: 4.10.0 + state: modifying + status_updated_at: "1976-03-01T20:13:25Z" + updated_at: "1996-05-27T17:04:41Z" + - connection_info: + addresses: + - 10.24.34.2 + - i-0123456789abcdef.ec2.internal + port: 5432 + created_at: "1984-01-30T10:40:13Z" + error: 'failed to get patroni status: connection refused' + host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec + id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d + node_name: n1 + postgres: + patroni_paused: true + patroni_state: unknown + pending_restart: true + role: primary + version: "18.1" + spock: + read_only: "off" + subscriptions: + - name: sub_n1n2 + provider_node: n2 + status: down + - name: sub_n1n2 + provider_node: n2 + status: down + - name: sub_n1n2 + provider_node: n2 + status: down + version: 4.10.0 + state: modifying + status_updated_at: "1976-03-01T20:13:25Z" + updated_at: "1996-05-27T17:04:41Z" + - connection_info: + addresses: + - 10.24.34.2 + - i-0123456789abcdef.ec2.internal + port: 5432 + created_at: "1984-01-30T10:40:13Z" error: 'failed to get patroni status: connection refused' host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d @@ -16389,7 +16186,7 @@ components: postgres: patroni_paused: true patroni_state: unknown - pending_restart: false + pending_restart: true role: primary version: "18.1" spock: @@ -16405,15 +16202,15 @@ components: provider_node: n2 status: down version: 4.10.0 - state: degraded - status_updated_at: "1990-07-23T01:22:30Z" - updated_at: "2013-01-29T23:51:44Z" + state: modifying + status_updated_at: "1976-03-01T20:13:25Z" + updated_at: "1996-05-27T17:04:41Z" - connection_info: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 - created_at: "2001-11-21T07:07:15Z" + created_at: "1984-01-30T10:40:13Z" error: 'failed to get patroni status: connection refused' host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d @@ -16421,7 +16218,7 @@ components: postgres: patroni_paused: true patroni_state: unknown - pending_restart: false + pending_restart: true role: primary version: "18.1" spock: @@ -16437,10 +16234,10 @@ components: provider_node: n2 status: down version: 4.10.0 - state: degraded - status_updated_at: "1990-07-23T01:22:30Z" - updated_at: "2013-01-29T23:51:44Z" - state: failed + state: modifying + status_updated_at: "1976-03-01T20:13:25Z" + updated_at: "1996-05-27T17:04:41Z" + state: restoring tenant_id: 8210ec10-2dca-406c-ac4a-0661d2189954 updated_at: "2025-01-01T02:30:00Z" required: @@ -16455,7 +16252,7 @@ components: type: array items: type: string - example: Aut omnis magnam aspernatur occaecati itaque dolores. + example: Autem eum et et eius at praesentium. description: The attributes to assign to this database user. example: - LOGIN @@ -16465,7 +16262,7 @@ components: db_owner: type: boolean description: If true, this user will be granted database ownership. - example: true + example: false password: type: string description: The password for this database user. This field will be excluded from the response of all endpoints. It can also be omitted from update requests to keep the current value. @@ -16475,7 +16272,7 @@ components: type: array items: type: string - example: Dolor autem eum. + example: Dolorem sapiente placeat illo dolore totam accusamus. description: The roles to assign to this database user. example: - pgedge_superuser @@ -16490,7 +16287,7 @@ components: - LOGIN - CREATEDB - CREATEROLE - db_owner: true + db_owner: false password: secret roles: - pgedge_superuser @@ -16518,7 +16315,7 @@ components: type: array items: type: string - example: Rerum animi et itaque placeat placeat. + example: Voluptates maxime hic aut omnis magnam. description: The Etcd client endpoint for this cluster member. example: - http://192.168.1.1:2379 @@ -16530,7 +16327,7 @@ components: type: array items: type: string - example: Repudiandae ab sed. + example: A enim. description: The Etcd peer endpoint for this cluster member. example: - http://192.168.1.1:2380 @@ -16551,7 +16348,7 @@ components: type: array items: type: string - example: Aliquid cupiditate sapiente eos aut dignissimos cum. + example: Quia non atque facilis non modi. description: Optional network-scoped aliases for the container. example: - pg-db @@ -16564,7 +16361,7 @@ components: com.docker.network.endpoint.expose: "true" additionalProperties: type: string - example: Modi consequatur non at. + example: Illum alias qui et. id: type: string description: The name or ID of the network to connect to. @@ -16626,7 +16423,7 @@ components: candidate_instance_id: 68f50878-44d2-4524-a823-e31bd478706d-n1-689qacsi database_id: my-app node_name: n1 - skip_validation: true + skip_validation: false required: - database_id - node_name @@ -16644,7 +16441,7 @@ components: example: false example: candidate_instance_id: 68f50878-44d2-4524-a823-e31bd478706d-n1-689qacsi - skip_validation: false + skip_validation: true FailoverDatabaseNodeResponse: type: object properties: @@ -16694,7 +16491,7 @@ components: type: array items: type: string - example: Illo aut et corporis harum. + example: Consequuntur reprehenderit esse id labore. description: The addresses that this host advertises to client applications. example: - 10.24.34.2 @@ -16737,7 +16534,7 @@ components: type: array items: type: string - example: Eos molestiae voluptates laborum. + example: Veritatis et omnis non. description: The addresses that this host advertises to other hosts. example: - 10.24.34.2 @@ -16756,8 +16553,6 @@ components: spock_version: "5" - postgres_version: "17.6" spock_version: "5" - - postgres_version: "17.6" - spock_version: "5" example: client_addresses: - 10.24.34.2 @@ -16799,6 +16594,10 @@ components: spock_version: "5" - postgres_version: "17.6" spock_version: "5" + - postgres_version: "17.6" + spock_version: "5" + - postgres_version: "17.6" + spock_version: "5" required: - id - orchestrator @@ -16836,7 +16635,7 @@ components: type: object description: The status of each component of the host. example: - Sint ea omnis ut.: + Harum voluptatum nulla commodi quo.: details: alarms: - '3: NOSPACE' @@ -16859,19 +16658,19 @@ components: format: date-time example: components: - Impedit laudantium et quia commodi consequatur.: + Eius totam dolorem itaque aut aut.: details: alarms: - '3: NOSPACE' error: failed to connect to etcd healthy: false - Possimus magni quaerat qui quam id.: + Nihil facere ad tenetur iure quisquam.: details: alarms: - '3: NOSPACE' error: failed to connect to etcd healthy: false - Velit et labore in dolor quisquam placeat.: + Sunt quibusdam quis.: details: alarms: - '3: NOSPACE' @@ -16903,7 +16702,7 @@ components: created_at: type: string description: The time that the instance was created. - example: "1985-10-05T07:39:21Z" + example: "1994-08-08T11:48:05Z" format: date-time error: type: string @@ -16941,12 +16740,12 @@ components: status_updated_at: type: string description: The time that the instance status information was last updated. - example: "1980-07-23T10:57:18Z" + example: "2006-09-13T00:37:13Z" format: date-time updated_at: type: string description: The time that the instance was last modified. - example: "2012-09-29T21:49:40Z" + example: "1970-10-18T00:04:10Z" format: date-time description: An instance of pgEdge Postgres running on a host. example: @@ -16955,7 +16754,7 @@ components: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 - created_at: "1978-04-27T14:09:21Z" + created_at: "1972-11-23T09:23:25Z" error: 'failed to get patroni status: connection refused' host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d @@ -16963,7 +16762,7 @@ components: postgres: patroni_paused: true patroni_state: unknown - pending_restart: false + pending_restart: true role: primary version: "18.1" spock: @@ -16979,9 +16778,9 @@ components: provider_node: n2 status: down version: 4.10.0 - state: degraded - status_updated_at: "1976-06-24T23:38:37Z" - updated_at: "2015-04-11T16:50:06Z" + state: creating + status_updated_at: "2005-07-17T23:25:59Z" + updated_at: "1997-05-17T16:59:26Z" required: - id - host_id @@ -16996,7 +16795,7 @@ components: type: array items: type: string - example: Facere eius totam. + example: Eaque eos quos autem perspiciatis. description: The addresses of the host that's running this instance. example: - 10.24.34.2 @@ -17018,14 +16817,14 @@ components: patroni_paused: type: boolean description: True if Patroni is paused for this instance. - example: false + example: true patroni_state: type: string example: unknown pending_restart: type: boolean description: True if this instance has a pending restart from a configuration change. - example: true + example: false role: type: string example: primary @@ -17062,9 +16861,6 @@ components: - name: sub_n1n2 provider_node: n2 status: down - - name: sub_n1n2 - provider_node: n2 - status: down version: type: string description: The version of Spock for this instance. @@ -17141,14 +16937,6 @@ components: status: completed task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 type: create - - completed_at: "2025-06-18T16:52:35Z" - created_at: "2025-06-18T16:52:05Z" - database_id: storefront - entity_id: storefront - scope: database - status: completed - task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 - type: create example: tasks: - completed_at: "2025-06-18T17:54:36Z" @@ -17203,7 +16991,7 @@ components: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 - created_at: "2001-11-21T07:07:15Z" + created_at: "1984-01-30T10:40:13Z" error: 'failed to get patroni status: connection refused' host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d @@ -17211,7 +16999,7 @@ components: postgres: patroni_paused: true patroni_state: unknown - pending_restart: false + pending_restart: true role: primary version: "18.1" spock: @@ -17227,15 +17015,15 @@ components: provider_node: n2 status: down version: 4.10.0 - state: degraded - status_updated_at: "1990-07-23T01:22:30Z" - updated_at: "2013-01-29T23:51:44Z" + state: modifying + status_updated_at: "1976-03-01T20:13:25Z" + updated_at: "1996-05-27T17:04:41Z" - connection_info: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 - created_at: "2001-11-21T07:07:15Z" + created_at: "1984-01-30T10:40:13Z" error: 'failed to get patroni status: connection refused' host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d @@ -17243,7 +17031,7 @@ components: postgres: patroni_paused: true patroni_state: unknown - pending_restart: false + pending_restart: true role: primary version: "18.1" spock: @@ -17259,15 +17047,15 @@ components: provider_node: n2 status: down version: 4.10.0 - state: degraded - status_updated_at: "1990-07-23T01:22:30Z" - updated_at: "2013-01-29T23:51:44Z" + state: modifying + status_updated_at: "1976-03-01T20:13:25Z" + updated_at: "1996-05-27T17:04:41Z" - connection_info: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 - created_at: "2001-11-21T07:07:15Z" + created_at: "1984-01-30T10:40:13Z" error: 'failed to get patroni status: connection refused' host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d @@ -17275,7 +17063,7 @@ components: postgres: patroni_paused: true patroni_state: unknown - pending_restart: false + pending_restart: true role: primary version: "18.1" spock: @@ -17291,15 +17079,21 @@ components: provider_node: n2 status: down version: 4.10.0 - state: degraded - status_updated_at: "1990-07-23T01:22:30Z" - updated_at: "2013-01-29T23:51:44Z" + state: modifying + status_updated_at: "1976-03-01T20:13:25Z" + updated_at: "1996-05-27T17:04:41Z" + state: modifying + tenant_id: 8210ec10-2dca-406c-ac4a-0661d2189954 + updated_at: "2025-01-01T02:30:00Z" + - created_at: "2025-01-01T01:30:00Z" + id: 02f1a7db-fca8-4521-b57a-2a375c1ced51 + instances: - connection_info: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 - created_at: "2001-11-21T07:07:15Z" + created_at: "1984-01-30T10:40:13Z" error: 'failed to get patroni status: connection refused' host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d @@ -17307,7 +17101,7 @@ components: postgres: patroni_paused: true patroni_state: unknown - pending_restart: false + pending_restart: true role: primary version: "18.1" spock: @@ -17323,21 +17117,15 @@ components: provider_node: n2 status: down version: 4.10.0 - state: degraded - status_updated_at: "1990-07-23T01:22:30Z" - updated_at: "2013-01-29T23:51:44Z" - state: failed - tenant_id: 8210ec10-2dca-406c-ac4a-0661d2189954 - updated_at: "2025-01-01T02:30:00Z" - - created_at: "2025-01-01T01:30:00Z" - id: 02f1a7db-fca8-4521-b57a-2a375c1ced51 - instances: + state: modifying + status_updated_at: "1976-03-01T20:13:25Z" + updated_at: "1996-05-27T17:04:41Z" - connection_info: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 - created_at: "2001-11-21T07:07:15Z" + created_at: "1984-01-30T10:40:13Z" error: 'failed to get patroni status: connection refused' host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d @@ -17345,7 +17133,7 @@ components: postgres: patroni_paused: true patroni_state: unknown - pending_restart: false + pending_restart: true role: primary version: "18.1" spock: @@ -17361,15 +17149,15 @@ components: provider_node: n2 status: down version: 4.10.0 - state: degraded - status_updated_at: "1990-07-23T01:22:30Z" - updated_at: "2013-01-29T23:51:44Z" + state: modifying + status_updated_at: "1976-03-01T20:13:25Z" + updated_at: "1996-05-27T17:04:41Z" - connection_info: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 - created_at: "2001-11-21T07:07:15Z" + created_at: "1984-01-30T10:40:13Z" error: 'failed to get patroni status: connection refused' host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d @@ -17377,7 +17165,7 @@ components: postgres: patroni_paused: true patroni_state: unknown - pending_restart: false + pending_restart: true role: primary version: "18.1" spock: @@ -17393,15 +17181,21 @@ components: provider_node: n2 status: down version: 4.10.0 - state: degraded - status_updated_at: "1990-07-23T01:22:30Z" - updated_at: "2013-01-29T23:51:44Z" + state: modifying + status_updated_at: "1976-03-01T20:13:25Z" + updated_at: "1996-05-27T17:04:41Z" + state: modifying + tenant_id: 8210ec10-2dca-406c-ac4a-0661d2189954 + updated_at: "2025-01-01T02:30:00Z" + - created_at: "2025-01-01T01:30:00Z" + id: 02f1a7db-fca8-4521-b57a-2a375c1ced51 + instances: - connection_info: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 - created_at: "2001-11-21T07:07:15Z" + created_at: "1984-01-30T10:40:13Z" error: 'failed to get patroni status: connection refused' host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d @@ -17409,7 +17203,7 @@ components: postgres: patroni_paused: true patroni_state: unknown - pending_restart: false + pending_restart: true role: primary version: "18.1" spock: @@ -17425,15 +17219,15 @@ components: provider_node: n2 status: down version: 4.10.0 - state: degraded - status_updated_at: "1990-07-23T01:22:30Z" - updated_at: "2013-01-29T23:51:44Z" + state: modifying + status_updated_at: "1976-03-01T20:13:25Z" + updated_at: "1996-05-27T17:04:41Z" - connection_info: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 - created_at: "2001-11-21T07:07:15Z" + created_at: "1984-01-30T10:40:13Z" error: 'failed to get patroni status: connection refused' host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d @@ -17441,7 +17235,7 @@ components: postgres: patroni_paused: true patroni_state: unknown - pending_restart: false + pending_restart: true role: primary version: "18.1" spock: @@ -17457,21 +17251,15 @@ components: provider_node: n2 status: down version: 4.10.0 - state: degraded - status_updated_at: "1990-07-23T01:22:30Z" - updated_at: "2013-01-29T23:51:44Z" - state: failed - tenant_id: 8210ec10-2dca-406c-ac4a-0661d2189954 - updated_at: "2025-01-01T02:30:00Z" - - created_at: "2025-01-01T01:30:00Z" - id: 02f1a7db-fca8-4521-b57a-2a375c1ced51 - instances: + state: modifying + status_updated_at: "1976-03-01T20:13:25Z" + updated_at: "1996-05-27T17:04:41Z" - connection_info: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 - created_at: "2001-11-21T07:07:15Z" + created_at: "1984-01-30T10:40:13Z" error: 'failed to get patroni status: connection refused' host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d @@ -17479,7 +17267,7 @@ components: postgres: patroni_paused: true patroni_state: unknown - pending_restart: false + pending_restart: true role: primary version: "18.1" spock: @@ -17495,15 +17283,21 @@ components: provider_node: n2 status: down version: 4.10.0 - state: degraded - status_updated_at: "1990-07-23T01:22:30Z" - updated_at: "2013-01-29T23:51:44Z" + state: modifying + status_updated_at: "1976-03-01T20:13:25Z" + updated_at: "1996-05-27T17:04:41Z" + state: modifying + tenant_id: 8210ec10-2dca-406c-ac4a-0661d2189954 + updated_at: "2025-01-01T02:30:00Z" + - created_at: "2025-01-01T01:30:00Z" + id: 02f1a7db-fca8-4521-b57a-2a375c1ced51 + instances: - connection_info: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 - created_at: "2001-11-21T07:07:15Z" + created_at: "1984-01-30T10:40:13Z" error: 'failed to get patroni status: connection refused' host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d @@ -17511,7 +17305,7 @@ components: postgres: patroni_paused: true patroni_state: unknown - pending_restart: false + pending_restart: true role: primary version: "18.1" spock: @@ -17527,15 +17321,15 @@ components: provider_node: n2 status: down version: 4.10.0 - state: degraded - status_updated_at: "1990-07-23T01:22:30Z" - updated_at: "2013-01-29T23:51:44Z" + state: modifying + status_updated_at: "1976-03-01T20:13:25Z" + updated_at: "1996-05-27T17:04:41Z" - connection_info: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 - created_at: "2001-11-21T07:07:15Z" + created_at: "1984-01-30T10:40:13Z" error: 'failed to get patroni status: connection refused' host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d @@ -17543,7 +17337,7 @@ components: postgres: patroni_paused: true patroni_state: unknown - pending_restart: false + pending_restart: true role: primary version: "18.1" spock: @@ -17559,15 +17353,15 @@ components: provider_node: n2 status: down version: 4.10.0 - state: degraded - status_updated_at: "1990-07-23T01:22:30Z" - updated_at: "2013-01-29T23:51:44Z" + state: modifying + status_updated_at: "1976-03-01T20:13:25Z" + updated_at: "1996-05-27T17:04:41Z" - connection_info: addresses: - 10.24.34.2 - i-0123456789abcdef.ec2.internal port: 5432 - created_at: "2001-11-21T07:07:15Z" + created_at: "1984-01-30T10:40:13Z" error: 'failed to get patroni status: connection refused' host_id: de3b1388-1f0c-42f1-a86c-59ab72f255ec id: a67cbb36-c3c3-49c9-8aac-f4a0438a883d @@ -17575,7 +17369,7 @@ components: postgres: patroni_paused: true patroni_state: unknown - pending_restart: false + pending_restart: true role: primary version: "18.1" spock: @@ -17591,10 +17385,10 @@ components: provider_node: n2 status: down version: 4.10.0 - state: degraded - status_updated_at: "1990-07-23T01:22:30Z" - updated_at: "2013-01-29T23:51:44Z" - state: failed + state: modifying + status_updated_at: "1976-03-01T20:13:25Z" + updated_at: "1996-05-27T17:04:41Z" + state: modifying tenant_id: 8210ec10-2dca-406c-ac4a-0661d2189954 updated_at: "2025-01-01T02:30:00Z" example: @@ -17792,14 +17586,6 @@ components: status: completed task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 type: create - - completed_at: "2025-06-18T16:52:35Z" - created_at: "2025-06-18T16:52:05Z" - database_id: storefront - entity_id: storefront - scope: database - status: completed - task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 - type: create example: tasks: - completed_at: "2025-06-18T17:54:36Z" @@ -17905,6 +17691,48 @@ components: spock_version: "5" - postgres_version: "17.6" spock_version: "5" + - client_addresses: + - 10.24.34.2 + - i-0123456789abcdef.ec2.internal + cohort: + control_available: true + member_id: lah4bsznw6kc0hp7biylmmmll + type: swarm + cpus: 4 + data_dir: /data + default_pgedge_version: + postgres_version: "17.6" + spock_version: "5" + etcd_mode: server + id: de3b1388-1f0c-42f1-a86c-59ab72f255ec + memory: 16GiB + orchestrator: swarm + peer_addresses: + - 10.24.34.2 + - i-0123456789abcdef.ec2.internal + status: + components: + Enim et voluptatum ex ea dolore.: + details: + alarms: + - '3: NOSPACE' + error: failed to connect to etcd + healthy: false + Tenetur nostrum repellendus sint qui.: + details: + alarms: + - '3: NOSPACE' + error: failed to connect to etcd + healthy: false + state: available + updated_at: "2021-07-01T12:34:56Z" + supported_pgedge_versions: + - postgres_version: "17.6" + spock_version: "5" + - postgres_version: "17.6" + spock_version: "5" + - postgres_version: "17.6" + spock_version: "5" description: Response containing the list of hosts example: hosts: @@ -18019,22 +17847,6 @@ components: status: completed task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 type: create - - completed_at: "2025-06-18T16:52:35Z" - created_at: "2025-06-18T16:52:05Z" - database_id: storefront - entity_id: storefront - scope: database - status: completed - task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 - type: create - - completed_at: "2025-06-18T16:52:35Z" - created_at: "2025-06-18T16:52:05Z" - database_id: storefront - entity_id: storefront - scope: database - status: completed - task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 - type: create example: tasks: - completed_at: "2025-06-18T17:54:36Z" @@ -18093,6 +17905,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Animi recusandae. PgEdgeVersion: type: object properties: @@ -18236,7 +18049,7 @@ components: maxLength: 32 additionalProperties: type: string - example: Et aut aut. + example: Eos aut dignissimos cum voluptate modi consequatur. source_database_id: type: string description: A user-specified identifier. Must be 1-36 characters, contain only lower-cased letters and hyphens, start and end with a letter or number, and not contain consecutive hyphens. @@ -18294,7 +18107,7 @@ components: type: array items: type: string - example: Dolore eos et sunt culpa animi dolor. + example: Error eligendi recusandae similique sed neque eos. description: The nodes to restore. Defaults to all nodes if empty or unspecified. example: - n1 @@ -18338,14 +18151,6 @@ components: status: completed task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 type: create - - completed_at: "2025-06-18T16:52:35Z" - created_at: "2025-06-18T16:52:05Z" - database_id: storefront - entity_id: storefront - scope: database - status: completed - task_id: 019783f4-75f4-71e7-85a3-c9b96b345d77 - type: create task: $ref: '#/components/schemas/Task' example: @@ -18699,7 +18504,7 @@ components: s3-kms-key-id: 1234abcd-12ab-34cd-56ef-1234567890ab additionalProperties: type: string - example: Accusamus alias ipsa qui. + example: Dolor quam aliquid cupiditate. gcs_bucket: type: string description: The GCS bucket name for this repository. Only applies when type = 'gcs'. @@ -18785,7 +18590,7 @@ components: type: array items: type: string - example: i + example: "n" minLength: 1 maxLength: 1024 description: Each element of this array is an individual SQL statement. @@ -18888,7 +18693,7 @@ components: type: array items: type: string - example: Et animi magnam velit vitae praesentium ad. + example: Quis in sunt dignissimos occaecati cupiditate. description: The addresses of the host that's running this service instance. example: - 10.24.34.2 @@ -18923,6 +18728,9 @@ components: - container_port: 8080 host_port: 8080 name: web-client + - container_port: 8080 + host_port: 8080 + name: web-client service_ready: type: boolean description: Whether the service is ready to accept requests. @@ -19028,6 +18836,7 @@ components: target_session_attrs: primary host_ids: - de3b1388-1f0c-42f1-a86c-59ab72f255ec + - de3b1388-1f0c-42f1-a86c-59ab72f255ec memory: 512M orchestrator_opts: swarm: @@ -19060,6 +18869,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Animi recusandae. port: 0 service_id: analytics-service service_type: rag @@ -19102,7 +18912,6 @@ components: description: The IDs of the hosts that should run this service. One service instance will be created per host. example: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - - 76f9b8c0-4958-11f0-a489-3bb29577c696 minItems: 1 memory: type: string @@ -19152,7 +18961,6 @@ components: host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - 76f9b8c0-4958-11f0-a489-3bb29577c696 - - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -19185,6 +18993,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Necessitatibus excepturi reprehenderit. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -19309,6 +19118,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -19351,6 +19161,8 @@ components: description: The IDs of the hosts that should run this service. One service instance will be created per host. example: - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 minItems: 1 memory: type: string @@ -19399,8 +19211,6 @@ components: target_session_attrs: primary host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - - 76f9b8c0-4958-11f0-a489-3bb29577c696 - - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -19433,6 +19243,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -19475,6 +19286,8 @@ components: description: The IDs of the hosts that should run this service. One service instance will be created per host. example: - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 minItems: 1 memory: type: string @@ -19523,6 +19336,8 @@ components: target_session_attrs: primary host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 + - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -19555,6 +19370,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Quia reiciendis et odio omnis itaque cum. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -19646,8 +19462,6 @@ components: target_session_attrs: primary host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - - 76f9b8c0-4958-11f0-a489-3bb29577c696 - - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -19680,6 +19494,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -19770,7 +19585,6 @@ components: target_session_attrs: primary host_ids: - 76f9b8c0-4958-11f0-a489-3bb29577c696 - - 76f9b8c0-4958-11f0-a489-3bb29577c696 memory: 512M orchestrator_opts: swarm: @@ -19803,6 +19617,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Dignissimos incidunt in quas totam eveniet possimus. port: 0 service_id: 76f9b8c0-4958-11f0-a489-3bb29577c696 service_type: rag @@ -19860,7 +19675,7 @@ components: traefik.tcp.routers.mydb.rule: HostSNI(`mydb.example.com`) additionalProperties: type: string - example: Error eligendi recusandae similique sed neque eos. + example: Veritatis quo recusandae quibusdam fuga. extra_networks: type: array items: @@ -19899,6 +19714,10 @@ components: - destination_path: /backups/container host_path: /Users/user/backups/host maxItems: 16 + image: + type: string + description: User-specified container image override. Bypasses manifest version constraints entirely — the CP will deploy this image without validating it against the version manifest. The CP verifies the image exists in its registry before accepting the spec. Clearing this field causes the CP to fall back to the manifest-resolved image on the next reconcile. + example: Repellat quas nostrum eos. description: Docker Swarm-specific options. example: extra_labels: @@ -19930,6 +19749,7 @@ components: host_path: /Users/user/backups/host - destination_path: /backups/container host_path: /Users/user/backups/host + image: Qui ullam qui quam sint iure eum. SwitchoverDatabaseNodeRequest: type: object properties: @@ -20110,11 +19930,6 @@ components: status: creating message: task started timestamp: "2025-05-29T15:43:13Z" - - fields: - option.enabled: true - status: creating - message: task started - timestamp: "2025-05-29T15:43:13Z" last_entry_id: type: string description: The ID of the last entry in the task log. diff --git a/server/internal/api/apiv1/convert.go b/server/internal/api/apiv1/convert.go index e1372fdb..4a74d0fb 100644 --- a/server/internal/api/apiv1/convert.go +++ b/server/internal/api/apiv1/convert.go @@ -1074,6 +1074,7 @@ func orchestratorOptsToDatabase(opts *api.OrchestratorOpts) *database.Orchestrat ExtraVolumes: extraVolumesToDatabase(opts.Swarm.ExtraVolumes), ExtraNetworks: extraNetworksToDatabase(opts.Swarm.ExtraNetworks), ExtraLabels: maps.Clone(opts.Swarm.ExtraLabels), + Image: utils.FromPointer(opts.Swarm.Image), }, } } @@ -1087,9 +1088,9 @@ func orchestratorOptsToAPI(opts *database.OrchestratorOpts) *api.OrchestratorOpt ExtraVolumes: extraVolumesToAPI(opts.Swarm.ExtraVolumes), ExtraNetworks: extraNetworksToAPI(opts.Swarm.ExtraNetworks), ExtraLabels: maps.Clone(opts.Swarm.ExtraLabels), + Image: utils.PointerTo(opts.Swarm.Image), }, } - } func extraNetworksToDatabase(networks []*api.ExtraNetworkSpec) []database.ExtraNetworkSpec { diff --git a/server/internal/api/apiv1/convert_test.go b/server/internal/api/apiv1/convert_test.go index 4e1df62b..28610b2d 100644 --- a/server/internal/api/apiv1/convert_test.go +++ b/server/internal/api/apiv1/convert_test.go @@ -1,6 +1,15 @@ package apiv1 -import "testing" +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + api "github.com/pgEdge/control-plane/api/apiv1/gen/control_plane" + "github.com/pgEdge/control-plane/server/internal/database" + "github.com/pgEdge/control-plane/server/internal/utils" +) func TestIsSensitiveConfigKey(t *testing.T) { sensitive := []string{ @@ -51,3 +60,49 @@ func TestNormalizeConfig(t *testing.T) { } }) } + +func TestOrchestratorOptsConversion_Image(t *testing.T) { + t.Run("Image is mapped from API to domain", func(t *testing.T) { + apiOpts := &api.OrchestratorOpts{ + Swarm: &api.SwarmOpts{ + Image: utils.PointerTo("ghcr.io/pgedge/pgedge-postgres:custom-image"), + }, + } + domain := orchestratorOptsToDatabase(apiOpts) + require.NotNil(t, domain) + require.NotNil(t, domain.Swarm) + assert.Equal(t, "ghcr.io/pgedge/pgedge-postgres:custom-image", domain.Swarm.Image) + }) + + t.Run("Image is mapped from domain to API", func(t *testing.T) { + domainOpts := &database.OrchestratorOpts{ + Swarm: &database.SwarmOpts{ + Image: "ghcr.io/pgedge/pgedge-postgres:custom-image", + }, + } + apiOpts := orchestratorOptsToAPI(domainOpts) + require.NotNil(t, apiOpts) + require.NotNil(t, apiOpts.Swarm) + require.NotNil(t, apiOpts.Swarm.Image) + assert.Equal(t, "ghcr.io/pgedge/pgedge-postgres:custom-image", *apiOpts.Swarm.Image) + }) + + t.Run("nil Image pointer maps to empty string in domain", func(t *testing.T) { + apiOpts := &api.OrchestratorOpts{ + Swarm: &api.SwarmOpts{Image: nil}, + } + domain := orchestratorOptsToDatabase(apiOpts) + require.NotNil(t, domain) + assert.Empty(t, domain.Swarm.Image) + }) + + t.Run("empty Image in domain maps to non-nil pointer with empty string", func(t *testing.T) { + domainOpts := &database.OrchestratorOpts{ + Swarm: &database.SwarmOpts{Image: ""}, + } + apiOpts := orchestratorOptsToAPI(domainOpts) + require.NotNil(t, apiOpts) + require.NotNil(t, apiOpts.Swarm.Image) + assert.Empty(t, *apiOpts.Swarm.Image) + }) +} diff --git a/server/internal/docker/docker.go b/server/internal/docker/docker.go index 7ce35c9a..f4af33f8 100644 --- a/server/internal/docker/docker.go +++ b/server/internal/docker/docker.go @@ -2,6 +2,8 @@ package docker import ( "context" + "encoding/base64" + "encoding/json" "errors" "fmt" "io" @@ -10,6 +12,8 @@ import ( "strings" "time" + dockercfg "github.com/cpuguy83/dockercfg" + "github.com/distribution/reference" "github.com/rs/zerolog" v1 "github.com/opencontainers/image-spec/specs-go/v1" @@ -23,6 +27,7 @@ import ( "github.com/docker/docker/api/types/image" "github.com/docker/docker/api/types/mount" "github.com/docker/docker/api/types/network" + "github.com/docker/docker/api/types/registry" "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/api/types/system" "github.com/docker/docker/client" @@ -584,6 +589,43 @@ func (d *Docker) Shutdown() error { return nil } +// CheckImageExists verifies that img is accessible in its registry by fetching +// its distribution manifest. This is a lightweight registry API call — no image +// layers are downloaded. Returns nil if the image exists, a non-nil error if it +// does not exist or cannot be reached. +func (d *Docker) CheckImageExists(ctx context.Context, img string) error { + encodedAuth := resolveRegistryAuth(img) + + ctx, cancel := context.WithTimeout(ctx, 30*time.Second) + defer cancel() + + _, err := d.client.DistributionInspect(ctx, img, encodedAuth) + if err != nil { + return fmt.Errorf("image %q not found or inaccessible: %w", img, err) + } + return nil +} + +// resolveRegistryAuth returns a base64-encoded JSON registry.AuthConfig for the +// registry that hosts img, loading credentials from the Docker config file. +// Returns an empty string (anonymous auth) if credentials cannot be resolved. +func resolveRegistryAuth(img string) string { + named, err := reference.ParseNormalizedNamed(img) + if err != nil { + return "" + } + hostname := reference.Domain(named) + username, password, err := dockercfg.GetRegistryCredentials(hostname) + if err != nil || (username == "" && password == "") { + return "" + } + authJSON, err := json.Marshal(registry.AuthConfig{Username: username, Password: password}) + if err != nil { + return "" + } + return base64.URLEncoding.EncodeToString(authJSON) +} + func (d *Docker) ensureDockerImage(ctx context.Context, img string) error { // Pull the image reader, err := d.client.ImagePull(ctx, img, image.PullOptions{}) diff --git a/server/internal/orchestrator/swarm/orchestrator.go b/server/internal/orchestrator/swarm/orchestrator.go index ed032411..d9a648e3 100644 --- a/server/internal/orchestrator/swarm/orchestrator.go +++ b/server/internal/orchestrator/swarm/orchestrator.go @@ -973,6 +973,29 @@ func (o *Orchestrator) ValidateInstanceSpecs(ctx context.Context, changes []*dat results := make([]*database.ValidationResult, 0, len(changes)*3) for _, ch := range changes { + // Validate user-specified image overrides. Runs for every spec change, + // independent of the structural diff below. + if cur := ch.Current; cur != nil { + if cur.OrchestratorOpts != nil && cur.OrchestratorOpts.Swarm != nil && cur.OrchestratorOpts.Swarm.Image != "" { + userImage := cur.OrchestratorOpts.Swarm.Image + + // Verify the image is reachable in its registry using a lightweight + // distribution manifest fetch — no layers are downloaded. + // Skipped when no Docker client is available (e.g. unit tests). + if o.docker != nil { + if err := o.docker.CheckImageExists(ctx, userImage); err != nil { + results = append(results, &database.ValidationResult{ + Valid: false, + NodeName: cur.NodeName, + HostID: cur.HostID, + Errors: []string{fmt.Sprintf("image %q could not be verified: %v", userImage, err)}, + }) + continue + } + } + } + } + updates := instanceDiff(ch.Previous, ch.Current) if updates.NewPort == nil && len(updates.NewVolumes) == 0 && len(updates.NewNetworks) == 0 { diff --git a/server/internal/orchestrator/swarm/validate_instance_specs_test.go b/server/internal/orchestrator/swarm/validate_instance_specs_test.go new file mode 100644 index 00000000..0e8008b4 --- /dev/null +++ b/server/internal/orchestrator/swarm/validate_instance_specs_test.go @@ -0,0 +1,89 @@ +package swarm + +import ( + "context" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/pgEdge/control-plane/server/internal/config" + "github.com/pgEdge/control-plane/server/internal/database" + "github.com/pgEdge/control-plane/server/internal/ds" +) + +func TestValidateInstanceSpecs_ImageValidation(t *testing.T) { + o := &Orchestrator{ + versions: NewVersions(config.Config{ + DockerSwarm: config.DockerSwarm{ + ImageRepositoryHost: "ghcr.io/pgedge", + }, + }), + } + ctx := context.Background() + + knownVersion := ds.MustParsePgEdgeVersion("17.9", "5") + unknownVersion := ds.MustParsePgEdgeVersion("99.99", "5") + + manifestImage, err := o.versions.GetImages(knownVersion) + require.NoError(t, err) + + t.Run("no result when Image is not set", func(t *testing.T) { + changes := []*database.InstanceSpecChange{ + {Current: &database.InstanceSpec{NodeName: "n1", HostID: "host-1", PgEdgeVersion: knownVersion}}, + } + results, err := o.ValidateInstanceSpecs(ctx, changes) + require.NoError(t, err) + assert.Empty(t, results) + }) + + t.Run("no result when Image matches manifest exactly", func(t *testing.T) { + changes := []*database.InstanceSpecChange{ + {Current: &database.InstanceSpec{ + NodeName: "n1", + HostID: "host-1", + PgEdgeVersion: knownVersion, + OrchestratorOpts: &database.OrchestratorOpts{ + Swarm: &database.SwarmOpts{Image: manifestImage.PgEdgeImage}, + }, + }}, + } + results, err := o.ValidateInstanceSpecs(ctx, changes) + require.NoError(t, err) + // Registry check skipped (no docker client). Image accepted as-is. + assert.Empty(t, results) + }) + + t.Run("no result when Image differs from manifest (registry check skipped in unit tests)", func(t *testing.T) { + changes := []*database.InstanceSpecChange{ + {Current: &database.InstanceSpec{ + NodeName: "n1", + HostID: "host-1", + PgEdgeVersion: knownVersion, + OrchestratorOpts: &database.OrchestratorOpts{ + Swarm: &database.SwarmOpts{Image: "ghcr.io/pgedge/pgedge-postgres:my-custom-image"}, + }, + }}, + } + results, err := o.ValidateInstanceSpecs(ctx, changes) + require.NoError(t, err) + // Registry check skipped (no docker client). Any image override is accepted as-is. + assert.Empty(t, results) + }) + + t.Run("no result when Image is set for an unknown version", func(t *testing.T) { + changes := []*database.InstanceSpecChange{ + {Current: &database.InstanceSpec{ + NodeName: "n1", + HostID: "host-1", + PgEdgeVersion: unknownVersion, + OrchestratorOpts: &database.OrchestratorOpts{ + Swarm: &database.SwarmOpts{Image: "ghcr.io/pgedge/pgedge-postgres:my-custom-image"}, + }, + }}, + } + results, err := o.ValidateInstanceSpecs(ctx, changes) + require.NoError(t, err) + assert.Empty(t, results) + }) +}