Skip to content

Extend NDB Operator capabilities to support Postgres HA#186

Open
rithvikayithapu wants to merge 17 commits intonutanix-cloud-native:mainfrom
rithvikayithapu:main
Open

Extend NDB Operator capabilities to support Postgres HA#186
rithvikayithapu wants to merge 17 commits intonutanix-cloud-native:mainfrom
rithvikayithapu:main

Conversation

@rithvikayithapu
Copy link
Copy Markdown

What this PR does / why we need it:

This PR incorporates the capability to provision Postgres HA databases in NDB via the operator.

Which issue(s) this PR fixes (optional, in fixes #<issue number>(, fixes #<issue_number>, ...) format, will close the issue(s) when PR gets merged):
Fixes #

How Has This Been Tested?:

The code changes have been tested using test scripts in webhook_suite_test.go (v1alpha1), database_test.go (controller_adapters) and db_helpers_test.go (ndb_api). Moreover the provisioning flow has been tested on Nutanix Test Drive. The YAML file used to provision the HA database is as follows

apiVersion: ndb.nutanix.com/v1alpha1
kind: Database
metadata:
  # This name that will be used within the kubernetes cluster
  name: postgresha
spec:
  # Name of the NDBServer resource created earlier
  ndbRef: ndb
  isClone: false
  # Database instance specific details (that is to be provisioned)
  databaseInstance:
    # Cluster id of the cluster where the Database has to be provisioned
    # Can be fetched from the GET /clusters endpoint
    clusterId: "6504a150-6063-4b2f-a5bd-3de0a7beb6ba"
    # The database instance name on NDB
    name: "PostgresHADemo"
    # The description of the database instance
    description: Database Description
    # Names of the databases on that instance
    databaseNames:
      - database_one
      - database_two
      - database_three
    # Credentials secret name for NDB installation
    # data: password, ssh_public_key
    credentialSecret: db-instance-secret-name
    size: 1
    timezone: "UTC"
    type: postgres
    isHighAvailability: true
    # You can specify any (or none) of these types of profiles: compute, software, network, dbParam
    # If not specified, the corresponding Out-of-Box (OOB) profile will be used wherever applicable
    # Name is case-sensitive. ID is the UUID of the profile. Profile should be in the "READY" state
    # "id" & "name" are optional. If none provided, OOB may be resolved to any profile of that type
    profiles:
      compute:
        id: ""
        name: ""
      # A Software profile is a mandatory input for closed-source engines: SQL Server & Oracle
      software:
        name: ""
        id: ""
      network:
        id: ""
        name: ""
      dbParam:
        name: ""
        id: ""
      # Only applicable for MSSQL databases
      dbParamInstance:
        name: ""
        id: ""
    timeMachine:                        # Optional block, if removed the SLA defaults to NONE
      sla : "DEFAULT_OOB_BRASS_SLA"
      dailySnapshotTime:   "12:34:56"   # Time for daily snapshot in hh:mm:ss format
      snapshotsPerDay:     4            # Number of snapshots per day
      logCatchUpFrequency: 90           # Frequency (in minutes)
      weeklySnapshotDay:   "WEDNESDAY"  # Day of the week for weekly snapshot
      monthlySnapshotDay:  24           # Day of the month for monthly snapshot
      quarterlySnapshotMonth: "Jan"     # Start month of the quarterly snapshot
    additionalArguments:                # Optional block, can specify additional arguments that are unique to database engines.
      listener_port: "8080"

Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration and test output

Special notes for your reviewer:

No image versions have been changed.

Please confirm that if this PR changes any image versions, then that's the sole change this PR makes.

Release note:

None

@irion4686 irion4686 mentioned this pull request Mar 23, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant