From 08d54c5838d1d74262986f706545df77e72d2992 Mon Sep 17 00:00:00 2001 From: Nicolas Bigler Date: Thu, 2 Nov 2023 18:05:58 +0100 Subject: [PATCH] Initial AWS RDS MySQL DBaaS support Signed-off-by: Nicolas Bigler --- apis/aws/v1/dbaas_aws.go | 50 +++++ apis/aws/v1/dbaas_aws_rds.go | 126 ++++++++++++ apis/aws/v1/groupversion_info.go | 5 + apis/aws/v1/zz_generated.deepcopy.go | 239 +++++++++++++++++++++++ crds/aws.appcat.vshn.io_awsrds.yaml | 280 +++++++++++++++++++++++++++ 5 files changed, 700 insertions(+) create mode 100644 apis/aws/v1/dbaas_aws.go create mode 100644 apis/aws/v1/dbaas_aws_rds.go create mode 100644 apis/aws/v1/groupversion_info.go create mode 100644 apis/aws/v1/zz_generated.deepcopy.go create mode 100644 crds/aws.appcat.vshn.io_awsrds.yaml diff --git a/apis/aws/v1/dbaas_aws.go b/apis/aws/v1/dbaas_aws.go new file mode 100644 index 0000000000..b2fbe42214 --- /dev/null +++ b/apis/aws/v1/dbaas_aws.go @@ -0,0 +1,50 @@ +package v1 + +type AwsDBaaSServiceSpec struct { + // +kubebuilder:validation:Enum=us-east-2;us-east-1;us-west-1;us-west-2;af-south-1;ap-east-1;ap-south-2;ap-southeast-3;ap-southeast-4;ap-south-1;ap-northeast-3;ap-northeast-2;ap-southeast-1;ap-southeast-2;ap-northeast-1;ca-central-1;eu-central-1;eu-west-1;eu-west-2;eu-south-1;eu-west-3;eu-south-2;eu-north-1;eu-central-2;il-central-1;me-south-1;me-central-1;sa-east-us-east-2;us-east-1;us-west-1;us-west-2;af-south-1;ap-east-1;ap-south-2;ap-southeast-3;ap-southeast-4;ap-south-1;ap-northeast-3;ap-northeast-2;ap-southeast-1;ap-southeast-2;ap-northeast-1;ca-central-1;eu-central-1;eu-west-1;eu-west-2;eu-south-1;eu-west-3;eu-south-2;eu-north-1;eu-central-2;il-central-1;me-south-1;me-central-1;sa-east-11 + // +kubebuilder:default="eu-central-1" + + // Region is the datacenter identifier in which the instance runs in. + Region string `json:"region,omitempty"` +} + +type AwsDBaaSMaintenanceScheduleSpec struct { + // +kubebuilder:default="Wed:00:00-Wed:03:00" + + // The window to perform maintenance in. + // Syntax: "ddd:hh24:mi-ddd:hh24:mi". Eg: "Mon:00:00-Mon:03:00". See RDS + // Maintenance Window + // docs + // for more information. + MaintenanceWindow string `json:"maintenanceWindow,omitempty"` +} + +type AwsDBaaSSizeSpec struct { + // +kubebuilder:default="db.t3.micro" + + // Plan is the name of the resource plan that defines the compute resources. + Plan string `json:"plan,omitempty"` + + // +kubebuilder:default=10 + + // StorageSize is the size of the storage in GB. + StorageSize int `json:"storageSize,omitempty"` + + // +kubebuilder:default="gp2" + + // StorageType is the storage type to use. + StorageType string `json:"storageType,omitempty"` +} + +type AwsDBaaSBackupSpec struct { + // +kubebuilder:validation:Pattern="^([0-1]?[0-9]|2[0-3]):([0-5][0-9])-([0-1]?[0-9]|2[0-3]):([0-5][0-9])$" + // +kubebuilder:default="21:30-22:00" + + // BackupWindow for doing daily backups, in UTC. + // Format: "hh:mm:ss". + BackupWindow string `json:"backupWindow,omitempty"` + + // +kubebuilder:default=7 + // RetentionPeriod is the number of days to retain backups for. + RetentionPeriod int `json:"retentionPeriod,omitempty"` +} diff --git a/apis/aws/v1/dbaas_aws_rds.go b/apis/aws/v1/dbaas_aws_rds.go new file mode 100644 index 0000000000..9801db5c9f --- /dev/null +++ b/apis/aws/v1/dbaas_aws_rds.go @@ -0,0 +1,126 @@ +package v1 + +import ( + v1 "github.com/vshn/appcat/v4/apis/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// Workaround to make nested defaulting work. +// kubebuilder is unable to set a {} default +//go:generate yq -i e ../../generated/aws.appcat.vshn.io_awsrds.yaml --expression "with(.spec.versions[]; .schema.openAPIV3Schema.properties.spec.properties.parameters.default={})" +//go:generate yq -i e ../../generated/aws.appcat.vshn.io_awsrds.yaml --expression "with(.spec.versions[]; .schema.openAPIV3Schema.properties.spec.properties.parameters.properties.maintenance.default={})" +//go:generate yq -i e ../../generated/aws.appcat.vshn.io_awsrds.yaml --expression "with(.spec.versions[]; .schema.openAPIV3Schema.properties.spec.properties.parameters.properties.backup.default={})" +//go:generate yq -i e ../../generated/aws.appcat.vshn.io_awsrds.yaml --expression "with(.spec.versions[]; .schema.openAPIV3Schema.properties.spec.properties.parameters.properties.service.default={})" +//go:generate yq -i e ../../generated/aws.appcat.vshn.io_awsrds.yaml --expression "with(.spec.versions[]; .schema.openAPIV3Schema.properties.spec.properties.parameters.properties.size.default={})" +// +kubebuilder:object:root=true +// +kubebuilder:printcolumn:name="Plan",type="string",JSONPath=".spec.parameters.size.plan" +// +kubebuilder:printcolumn:name="Region",type="string",JSONPath=".spec.parameters.service.region" + +// AwsRds is the API for creating RDS instances on AWS. +type AwsRds struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + // Spec defines the desired state of a AwsRds. + Spec AwsRdsSpec `json:"spec,omitempty"` + // Status reflects the observed state of a AwsRds. + Status AwsRdsStatus `json:"status,omitempty"` +} + +type AwsRdsSpec struct { + // Parameters are the configurable fields of a AwsRds. + Parameters AwsRdsParameters `json:"parameters,omitempty"` + + // WriteConnectionSecretToRef references a secret to which the connection details will be written. + WriteConnectionSecretToRef v1.LocalObjectReference `json:"writeConnectionSecretToRef,omitempty"` +} + +type AwsRdsParameters struct { + // Service contains AWS RDS DBaaS specific properties + Service AwsRdsServiceSpec `json:"service,omitempty"` + + // Maintenance contains settings to control the maintenance of an instance. + Maintenance AwsDBaaSMaintenanceScheduleSpec `json:"maintenance,omitempty"` + + // Size contains settings to control the sizing of a service. + Size AwsDBaaSSizeSpec `json:"size,omitempty"` + + // Backup contains settings to control the backups of an instance. + Backup AwsDBaaSBackupSpec `json:"backup,omitempty"` +} + +type AwsRdsServiceSpec struct { + AwsDBaaSServiceSpec `json:",inline"` + + // +kubebuilder:validation:Enum=aurora-mysql;aurora-postgresql;custom-oracle-ee;custom-oracle-ee-cdb;custom-sqlserver-ee;custom-sqlserver-se;custom-sqlserver-web;mariadb;mysql;oracle-ee;oracle-ee-cdb;oracle-se2;oracle-se2-cdb;postgres;sqlserver-ee;sqlserver-se;sqlserver-ex;sqlserver-web + // +kubebuilder:default="mysql" + + // Engine contains the type of the DB instance class. + Engine string `json:"engine,omitempty"` + + // +kubebuilder:default="8.0" + + // MajorVersion contains the major version for the instance. + // Depends on the chosen engine. + MajorVersion string `json:"majorVersion,omitempty"` + + // RdsSettings contains additional settings for the RDS instance. + RdsSettings []ParameterParameters `json:"rdsSettings,omitempty"` + + // RdsOptions contains additional options for the RDS instance. + RdsOptions []OptionObservation `json:"rdsOptions,omitempty"` + + // +kubebuilder:default="adminUser" + + // AdminUser contains the username for the admin user. + AdminUser string `json:"adminUser,omitempty"` + + // DBName contains the name of the database to create. + DBName string `json:"dbName,omitempty"` +} + +type AwsRdsStatus struct { + // RdsConditions contains the status conditions of the backing object. + RdsConditions []v1.Condition `json:"rdsConditions,omitempty"` +} + +type OptionObservation struct { + + // The Name of the Option (e.g., MEMCACHED). + OptionName *string `json:"optionName,omitempty"` + + // A list of option settings to apply. + OptionSettings []OptionSettingsObservation `json:"optionSettings,omitempty"` + + // The Port number when connecting to the Option (e.g., 11211). + Port int `json:"port,omitempty"` + + // The version of the option (e.g., 13.1.0.0). + Version string `json:"version,omitempty"` +} + +type OptionSettingsObservation struct { + + // The name of the option group. Must be lowercase, to match as it is stored in AWS. + Name string `json:"name,omitempty"` + + // The Value of the setting. + Value string `json:"value,omitempty"` +} + +type ParameterParameters struct { + + // "immediate" (default), or "pending-reboot". Some + // engines can't apply some parameters without a reboot, and you will need to + // specify "pending-reboot" here. + // +kubebuilder:validation:Optional + ApplyMethod string `json:"applyMethod,omitempty"` + + // The name of the DB parameter group. + // +kubebuilder:validation:Optional + Name string `json:"name"` + + // The value of the DB parameter. + // +kubebuilder:validation:Optional + Value string `json:"value" tf:"value,omitempty"` +} diff --git a/apis/aws/v1/groupversion_info.go b/apis/aws/v1/groupversion_info.go new file mode 100644 index 0000000000..0ffd1e62fa --- /dev/null +++ b/apis/aws/v1/groupversion_info.go @@ -0,0 +1,5 @@ +// +kubebuilder:object:generate=true +// +groupName=aws.appcat.vshn.io +// +versionName=v1 + +package v1 diff --git a/apis/aws/v1/zz_generated.deepcopy.go b/apis/aws/v1/zz_generated.deepcopy.go new file mode 100644 index 0000000000..cded8774dc --- /dev/null +++ b/apis/aws/v1/zz_generated.deepcopy.go @@ -0,0 +1,239 @@ +//go:build !ignore_autogenerated +// +build !ignore_autogenerated + +// Code generated by controller-gen. DO NOT EDIT. + +package v1 + +import ( + apisv1 "github.com/vshn/appcat/v4/apis/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AwsDBaaSBackupSpec) DeepCopyInto(out *AwsDBaaSBackupSpec) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AwsDBaaSBackupSpec. +func (in *AwsDBaaSBackupSpec) DeepCopy() *AwsDBaaSBackupSpec { + if in == nil { + return nil + } + out := new(AwsDBaaSBackupSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AwsDBaaSMaintenanceScheduleSpec) DeepCopyInto(out *AwsDBaaSMaintenanceScheduleSpec) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AwsDBaaSMaintenanceScheduleSpec. +func (in *AwsDBaaSMaintenanceScheduleSpec) DeepCopy() *AwsDBaaSMaintenanceScheduleSpec { + if in == nil { + return nil + } + out := new(AwsDBaaSMaintenanceScheduleSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AwsDBaaSServiceSpec) DeepCopyInto(out *AwsDBaaSServiceSpec) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AwsDBaaSServiceSpec. +func (in *AwsDBaaSServiceSpec) DeepCopy() *AwsDBaaSServiceSpec { + if in == nil { + return nil + } + out := new(AwsDBaaSServiceSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AwsDBaaSSizeSpec) DeepCopyInto(out *AwsDBaaSSizeSpec) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AwsDBaaSSizeSpec. +func (in *AwsDBaaSSizeSpec) DeepCopy() *AwsDBaaSSizeSpec { + if in == nil { + return nil + } + out := new(AwsDBaaSSizeSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AwsRds) DeepCopyInto(out *AwsRds) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AwsRds. +func (in *AwsRds) DeepCopy() *AwsRds { + if in == nil { + return nil + } + out := new(AwsRds) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *AwsRds) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AwsRdsParameters) DeepCopyInto(out *AwsRdsParameters) { + *out = *in + in.Service.DeepCopyInto(&out.Service) + out.Maintenance = in.Maintenance + out.Size = in.Size + out.Backup = in.Backup +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AwsRdsParameters. +func (in *AwsRdsParameters) DeepCopy() *AwsRdsParameters { + if in == nil { + return nil + } + out := new(AwsRdsParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AwsRdsServiceSpec) DeepCopyInto(out *AwsRdsServiceSpec) { + *out = *in + out.AwsDBaaSServiceSpec = in.AwsDBaaSServiceSpec + if in.RdsSettings != nil { + in, out := &in.RdsSettings, &out.RdsSettings + *out = make([]ParameterParameters, len(*in)) + copy(*out, *in) + } + if in.RdsOptions != nil { + in, out := &in.RdsOptions, &out.RdsOptions + *out = make([]OptionObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AwsRdsServiceSpec. +func (in *AwsRdsServiceSpec) DeepCopy() *AwsRdsServiceSpec { + if in == nil { + return nil + } + out := new(AwsRdsServiceSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AwsRdsSpec) DeepCopyInto(out *AwsRdsSpec) { + *out = *in + in.Parameters.DeepCopyInto(&out.Parameters) + out.WriteConnectionSecretToRef = in.WriteConnectionSecretToRef +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AwsRdsSpec. +func (in *AwsRdsSpec) DeepCopy() *AwsRdsSpec { + if in == nil { + return nil + } + out := new(AwsRdsSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AwsRdsStatus) DeepCopyInto(out *AwsRdsStatus) { + *out = *in + if in.RdsConditions != nil { + in, out := &in.RdsConditions, &out.RdsConditions + *out = make([]apisv1.Condition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AwsRdsStatus. +func (in *AwsRdsStatus) DeepCopy() *AwsRdsStatus { + if in == nil { + return nil + } + out := new(AwsRdsStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OptionObservation) DeepCopyInto(out *OptionObservation) { + *out = *in + if in.OptionName != nil { + in, out := &in.OptionName, &out.OptionName + *out = new(string) + **out = **in + } + if in.OptionSettings != nil { + in, out := &in.OptionSettings, &out.OptionSettings + *out = make([]OptionSettingsObservation, len(*in)) + copy(*out, *in) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OptionObservation. +func (in *OptionObservation) DeepCopy() *OptionObservation { + if in == nil { + return nil + } + out := new(OptionObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OptionSettingsObservation) DeepCopyInto(out *OptionSettingsObservation) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OptionSettingsObservation. +func (in *OptionSettingsObservation) DeepCopy() *OptionSettingsObservation { + if in == nil { + return nil + } + out := new(OptionSettingsObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ParameterParameters) DeepCopyInto(out *ParameterParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ParameterParameters. +func (in *ParameterParameters) DeepCopy() *ParameterParameters { + if in == nil { + return nil + } + out := new(ParameterParameters) + in.DeepCopyInto(out) + return out +} diff --git a/crds/aws.appcat.vshn.io_awsrds.yaml b/crds/aws.appcat.vshn.io_awsrds.yaml new file mode 100644 index 0000000000..3bd36dfc87 --- /dev/null +++ b/crds/aws.appcat.vshn.io_awsrds.yaml @@ -0,0 +1,280 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.12.1 + name: awsrds.aws.appcat.vshn.io +spec: + group: aws.appcat.vshn.io + names: + kind: AwsRds + listKind: AwsRdsList + plural: awsrds + singular: awsrds + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.parameters.size.plan + name: Plan + type: string + - jsonPath: .spec.parameters.service.region + name: Region + type: string + name: v1 + schema: + openAPIV3Schema: + description: AwsRds is the API for creating RDS instances on AWS. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: Spec defines the desired state of a AwsRds. + properties: + parameters: + description: Parameters are the configurable fields of a AwsRds. + properties: + backup: + description: Backup contains settings to control the backups of an instance. + properties: + backupWindow: + default: 21:30-22:00 + description: 'BackupWindow for doing daily backups, in UTC. Format: "hh:mm:ss".' + pattern: ^([0-1]?[0-9]|2[0-3]):([0-5][0-9])-([0-1]?[0-9]|2[0-3]):([0-5][0-9])$ + type: string + retentionPeriod: + default: 7 + description: RetentionPeriod is the number of days to retain backups for. + type: integer + type: object + default: {} + maintenance: + description: Maintenance contains settings to control the maintenance of an instance. + properties: + maintenanceWindow: + default: Wed:00:00-Wed:03:00 + description: 'The window to perform maintenance in. Syntax: "ddd:hh24:mi-ddd:hh24:mi". Eg: "Mon:00:00-Mon:03:00". See RDS Maintenance Window docs for more information.' + type: string + type: object + default: {} + service: + description: Service contains AWS RDS DBaaS specific properties + properties: + adminUser: + default: adminUser + description: AdminUser contains the username for the admin user. + type: string + dbName: + description: DBName contains the name of the database to create. + type: string + engine: + default: mysql + description: Engine contains the type of the DB instance class. + enum: + - aurora-mysql + - aurora-postgresql + - custom-oracle-ee + - custom-oracle-ee-cdb + - custom-sqlserver-ee + - custom-sqlserver-se + - custom-sqlserver-web + - mariadb + - mysql + - oracle-ee + - oracle-ee-cdb + - oracle-se2 + - oracle-se2-cdb + - postgres + - sqlserver-ee + - sqlserver-se + - sqlserver-ex + - sqlserver-web + type: string + majorVersion: + default: "8.0" + description: MajorVersion contains the major version for the instance. Depends on the chosen engine. + type: string + rdsOptions: + description: RdsOptions contains additional options for the RDS instance. + items: + properties: + optionName: + description: The Name of the Option (e.g., MEMCACHED). + type: string + optionSettings: + description: A list of option settings to apply. + items: + properties: + name: + description: The name of the option group. Must be lowercase, to match as it is stored in AWS. + type: string + value: + description: The Value of the setting. + type: string + type: object + type: array + port: + description: The Port number when connecting to the Option (e.g., 11211). + type: integer + version: + description: The version of the option (e.g., 13.1.0.0). + type: string + type: object + type: array + rdsSettings: + description: RdsSettings contains additional settings for the RDS instance. + items: + properties: + applyMethod: + description: '"immediate" (default), or "pending-reboot". Some engines can''t apply some parameters without a reboot, and you will need to specify "pending-reboot" here.' + type: string + name: + description: The name of the DB parameter group. + type: string + value: + description: The value of the DB parameter. + type: string + type: object + type: array + region: + default: eu-central-1 + description: Region is the datacenter identifier in which the instance runs in. + enum: + - us-east-2 + - us-east-1 + - us-west-1 + - us-west-2 + - af-south-1 + - ap-east-1 + - ap-south-2 + - ap-southeast-3 + - ap-southeast-4 + - ap-south-1 + - ap-northeast-3 + - ap-northeast-2 + - ap-southeast-1 + - ap-southeast-2 + - ap-northeast-1 + - ca-central-1 + - eu-central-1 + - eu-west-1 + - eu-west-2 + - eu-south-1 + - eu-west-3 + - eu-south-2 + - eu-north-1 + - eu-central-2 + - il-central-1 + - me-south-1 + - me-central-1 + - sa-east-us-east-2 + - us-east-1 + - us-west-1 + - us-west-2 + - af-south-1 + - ap-east-1 + - ap-south-2 + - ap-southeast-3 + - ap-southeast-4 + - ap-south-1 + - ap-northeast-3 + - ap-northeast-2 + - ap-southeast-1 + - ap-southeast-2 + - ap-northeast-1 + - ca-central-1 + - eu-central-1 + - eu-west-1 + - eu-west-2 + - eu-south-1 + - eu-west-3 + - eu-south-2 + - eu-north-1 + - eu-central-2 + - il-central-1 + - me-south-1 + - me-central-1 + - sa-east-11 + type: string + type: object + default: {} + size: + description: Size contains settings to control the sizing of a service. + properties: + plan: + default: db.t3.micro + description: Plan is the name of the resource plan that defines the compute resources. + type: string + storageSize: + default: 10 + description: StorageSize is the size of the storage in GB. + type: integer + storageType: + default: gp2 + description: StorageType is the storage type to use. + type: string + type: object + default: {} + type: object + default: {} + writeConnectionSecretToRef: + description: WriteConnectionSecretToRef references a secret to which the connection details will be written. + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + type: string + type: object + x-kubernetes-map-type: atomic + type: object + status: + description: Status reflects the observed state of a AwsRds. + properties: + rdsConditions: + description: RdsConditions contains the status conditions of the backing object. + items: + properties: + lastTransitionTime: + description: LastTransitionTime is the last time the condition transitioned from one status to another. + format: date-time + type: string + message: + description: Message is a human-readable message indicating details about the transition. + maxLength: 32768 + type: string + observedGeneration: + description: ObservedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: Reason contains a programmatic identifier indicating the reason for the condition's last transition. + maxLength: 1024 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: Status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: Type of condition. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + type: object + type: array + type: object + type: object + served: true + storage: true + subresources: {}