diff --git a/apis/v1alpha1/ack-generate-metadata.yaml b/apis/v1alpha1/ack-generate-metadata.yaml index e85c010..fa2737a 100755 --- a/apis/v1alpha1/ack-generate-metadata.yaml +++ b/apis/v1alpha1/ack-generate-metadata.yaml @@ -1,13 +1,13 @@ ack_generate_info: - build_date: "2025-06-10T23:44:28Z" + build_date: "2025-06-17T13:28:14Z" build_hash: e675923dfc54d8b6e09730098c3e3e1056d3c1e9 go_version: go1.24.3 version: v0.48.0 -api_directory_checksum: 6e988566399ff5f57e7cb877ae2502a2beadafd6 +api_directory_checksum: e1503bf59102aa80e29f20977c3d7964688fd9cf api_version: v1alpha1 aws_sdk_go_version: v1.36.3 generator_config_info: - file_checksum: a109a02848a7aca835505fad0a00707d2d56c55a + file_checksum: 0b4dec3b80e46714d71f2b495a26ab7e1b4ac60d original_file_name: generator.yaml last_modification: reason: API generation diff --git a/apis/v1alpha1/enums.go b/apis/v1alpha1/enums.go index d3f7a3d..8926550 100644 --- a/apis/v1alpha1/enums.go +++ b/apis/v1alpha1/enums.go @@ -313,15 +313,15 @@ const ( KnowledgeBaseState_ENABLED KnowledgeBaseState = "ENABLED" ) -type KnowledgeBaseStatus string +type KnowledgeBaseStatus_SDK string const ( - KnowledgeBaseStatus_ACTIVE KnowledgeBaseStatus = "ACTIVE" - KnowledgeBaseStatus_CREATING KnowledgeBaseStatus = "CREATING" - KnowledgeBaseStatus_DELETE_UNSUCCESSFUL KnowledgeBaseStatus = "DELETE_UNSUCCESSFUL" - KnowledgeBaseStatus_DELETING KnowledgeBaseStatus = "DELETING" - KnowledgeBaseStatus_FAILED KnowledgeBaseStatus = "FAILED" - KnowledgeBaseStatus_UPDATING KnowledgeBaseStatus = "UPDATING" + KnowledgeBaseStatus_SDK_ACTIVE KnowledgeBaseStatus_SDK = "ACTIVE" + KnowledgeBaseStatus_SDK_CREATING KnowledgeBaseStatus_SDK = "CREATING" + KnowledgeBaseStatus_SDK_DELETE_UNSUCCESSFUL KnowledgeBaseStatus_SDK = "DELETE_UNSUCCESSFUL" + KnowledgeBaseStatus_SDK_DELETING KnowledgeBaseStatus_SDK = "DELETING" + KnowledgeBaseStatus_SDK_FAILED KnowledgeBaseStatus_SDK = "FAILED" + KnowledgeBaseStatus_SDK_UPDATING KnowledgeBaseStatus_SDK = "UPDATING" ) type KnowledgeBaseStorageType string diff --git a/apis/v1alpha1/generator.yaml b/apis/v1alpha1/generator.yaml index 7519e2c..40d29af 100644 --- a/apis/v1alpha1/generator.yaml +++ b/apis/v1alpha1/generator.yaml @@ -9,13 +9,14 @@ ignore: - Flow - FlowAlias - FlowVersion - - KnowledgeBase + #- KnowledgeBase - Prompt - PromptVersion field_paths: # Uses unhandled type 'smithy.api#document' - "PromptOverrideConfiguration.PromptConfigurations.PromptConfiguration.AdditionalModelRequestFields" - CreateAgentInput.ClientToken + - CreateKnowledgeBaseInput.ClientToken resources: Agent: @@ -36,7 +37,7 @@ resources: from: operation: TagResource path: Tags - + synced: when: - path: Status.AgentStatus @@ -54,4 +55,40 @@ resources: sdk_update_pre_build_request: template_path: hooks/agent/sdk_update_pre_build_request.go.tpl - + KnowledgeBase: + synced: + when: + - path: Status.Status + in: + - ACTIVE + fields: + Name: + is_required: true + RoleArn: + is_required: true + KnowledgeBaseConfiguration: + is_required: true + KnowledgeBaseConfiguration.Type: + go_tag: json:"type,omitempty" + KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.Type: + go_tag: json:"type,omitempty" + KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.Type: + go_tag: json:"type,omitempty" + KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.Type: + go_tag: json:"type,omitempty" + KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.Type: + go_tag: json:"type,omitempty" +# KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.StorageConfigurations: +# type: "[]*RedshiftQueryEngineStorageConfiguration" +# go_tag: json:"type,omitempty" + StorageConfiguration.Type: + go_tag: json:"type,omitempty" + StorageConfiguration: + is_required: true + Tags: + from: + operation: TagResource + path: Tags + exceptions: + terminal_codes: + - ValidationException diff --git a/apis/v1alpha1/knowledge_base.go b/apis/v1alpha1/knowledge_base.go new file mode 100644 index 0000000..53768d4 --- /dev/null +++ b/apis/v1alpha1/knowledge_base.go @@ -0,0 +1,115 @@ +// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"). You may +// not use this file except in compliance with the License. A copy of the +// License is located at +// +// http://aws.amazon.com/apache2.0/ +// +// or in the "license" file accompanying this file. This file is distributed +// on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +// express or implied. See the License for the specific language governing +// permissions and limitations under the License. + +// Code generated by ack-generate. DO NOT EDIT. + +package v1alpha1 + +import ( + ackv1alpha1 "github.com/aws-controllers-k8s/runtime/apis/core/v1alpha1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// KnowledgeBaseSpec defines the desired state of KnowledgeBase. +// +// Contains information about a knowledge base. +type KnowledgeBaseSpec struct { + + // A description of the knowledge base. + Description *string `json:"description,omitempty"` + // Contains details about the embeddings model used for the knowledge base. + // +kubebuilder:validation:Required + KnowledgeBaseConfiguration *KnowledgeBaseConfiguration `json:"knowledgeBaseConfiguration"` + // A name for the knowledge base. + // + // Regex Pattern: `^([0-9a-zA-Z][_-]?){1,100}$` + // +kubebuilder:validation:Required + Name *string `json:"name"` + // The Amazon Resource Name (ARN) of the IAM role with permissions to invoke + // API operations on the knowledge base. + // + // Regex Pattern: `^arn:aws(-[^:]+)?:iam::([0-9]{12})?:role/.+$` + // +kubebuilder:validation:Required + RoleARN *string `json:"roleARN"` + // Contains details about the configuration of the vector database used for + // the knowledge base. + // +kubebuilder:validation:Required + StorageConfiguration *StorageConfiguration `json:"storageConfiguration"` + // An object containing key-value pairs that define the tags to attach to the + // resource. + Tags map[string]*string `json:"tags,omitempty"` +} + +// KnowledgeBaseStatus defines the observed state of KnowledgeBase +type KnowledgeBaseStatus struct { + // All CRs managed by ACK have a common `Status.ACKResourceMetadata` member + // that is used to contain resource sync state, account ownership, + // constructed ARN for the resource + // +kubebuilder:validation:Optional + ACKResourceMetadata *ackv1alpha1.ResourceMetadata `json:"ackResourceMetadata"` + // All CRs managed by ACK have a common `Status.Conditions` member that + // contains a collection of `ackv1alpha1.Condition` objects that describe + // the various terminal states of the CR and its backend AWS service API + // resource + // +kubebuilder:validation:Optional + Conditions []*ackv1alpha1.Condition `json:"conditions"` + // The time the knowledge base was created. + // +kubebuilder:validation:Optional + CreatedAt *metav1.Time `json:"createdAt,omitempty"` + // A list of reasons that the API operation on the knowledge base failed. + // +kubebuilder:validation:Optional + FailureReasons []*string `json:"failureReasons,omitempty"` + // The unique identifier of the knowledge base. + // + // Regex Pattern: `^[0-9a-zA-Z]{10}$` + // +kubebuilder:validation:Optional + KnowledgeBaseID *string `json:"knowledgeBaseID,omitempty"` + // The status of the knowledge base. The following statuses are possible: + // + // * CREATING – The knowledge base is being created. + // + // * ACTIVE – The knowledge base is ready to be queried. + // + // * DELETING – The knowledge base is being deleted. + // + // * UPDATING – The knowledge base is being updated. + // + // * FAILED – The knowledge base API operation failed. + // +kubebuilder:validation:Optional + Status *string `json:"status,omitempty"` + // The time the knowledge base was last updated. + // +kubebuilder:validation:Optional + UpdatedAt *metav1.Time `json:"updatedAt,omitempty"` +} + +// KnowledgeBase is the Schema for the KnowledgeBases API +// +kubebuilder:object:root=true +// +kubebuilder:subresource:status +type KnowledgeBase struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + Spec KnowledgeBaseSpec `json:"spec,omitempty"` + Status KnowledgeBaseStatus `json:"status,omitempty"` +} + +// KnowledgeBaseList contains a list of KnowledgeBase +// +kubebuilder:object:root=true +type KnowledgeBaseList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []KnowledgeBase `json:"items"` +} + +func init() { + SchemeBuilder.Register(&KnowledgeBase{}, &KnowledgeBaseList{}) +} diff --git a/apis/v1alpha1/types.go b/apis/v1alpha1/types.go index 6cdf589..6be3101 100644 --- a/apis/v1alpha1/types.go +++ b/apis/v1alpha1/types.go @@ -205,17 +205,36 @@ type Agent_SDK struct { UpdatedAt *metav1.Time `json:"updatedAt,omitempty"` } +// The vector configuration details for the Bedrock embeddings model. +type BedrockEmbeddingModelConfiguration struct { + Dimensions *int64 `json:"dimensions,omitempty"` + // Bedrock models embedding data type. Can be either float32 or binary. + EmbeddingDataType *string `json:"embeddingDataType,omitempty"` +} + // Contains information about content defined inline in bytes. type ByteContentDoc struct { MimeType *string `json:"mimeType,omitempty"` } +// The endpoint information to connect to your Confluence data source. +type ConfluenceSourceConfiguration struct { + CredentialsSecretARN *string `json:"credentialsSecretARN,omitempty"` +} + // Contains the content for the message you pass to, or receive from a model. // For more information, see Create a prompt using Prompt management (https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-management-create.html). type ContentBlock struct { Text *string `json:"text,omitempty"` } +// Contains configurations for a query, each of which defines information about +// example queries to help the query engine generate appropriate SQL queries. +type CuratedQuery struct { + NATuralLanguage *string `json:"naturalLanguage,omitempty"` + SQL *string `json:"sql,omitempty"` +} + // Contains information about the identifier of the document to ingest into // a custom data source. type CustomDocumentIdentifier struct { @@ -249,6 +268,18 @@ type DataSourceSummary struct { UpdatedAt *metav1.Time `json:"updatedAt,omitempty"` } +// Contains information that identifies the document. +type DocumentIdentifier struct { + // An Amazon S3 location. + S3 *S3Location `json:"s3,omitempty"` +} + +// The configuration details for the embeddings model. +type EmbeddingModelConfiguration struct { + // The vector configuration details for the Bedrock embeddings model. + BedrockEmbeddingModelConfiguration *BedrockEmbeddingModelConfiguration `json:"bedrockEmbeddingModelConfiguration,omitempty"` +} + // Contains information about a version that the alias maps to. type FlowAliasRoutingConfigurationListItem struct { FlowVersion *string `json:"flowVersion,omitempty"` @@ -347,14 +378,33 @@ type IngestionJobSummary struct { UpdatedAt *metav1.Time `json:"updatedAt,omitempty"` } -// Contains information about a knowledge base. -type KnowledgeBase struct { - CreatedAt *metav1.Time `json:"createdAt,omitempty"` - Description *string `json:"description,omitempty"` - FailureReasons []*string `json:"failureReasons,omitempty"` - KnowledgeBaseID *string `json:"knowledgeBaseID,omitempty"` - Name *string `json:"name,omitempty"` - UpdatedAt *metav1.Time `json:"updatedAt,omitempty"` +// A location for storing content from data sources temporarily as it is processed +// by custom components in the ingestion pipeline. +type IntermediateStorage struct { + // An Amazon S3 location. + S3Location *S3Location `json:"s3Location,omitempty"` +} + +// Settings for an Amazon Kendra knowledge base. +type KendraKnowledgeBaseConfiguration struct { + KendraIndexARN *string `json:"kendraIndexARN,omitempty"` +} + +// Contains details about the vector embeddings configuration of the knowledge +// base. +type KnowledgeBaseConfiguration struct { + // Settings for an Amazon Kendra knowledge base. + KendraKnowledgeBaseConfiguration *KendraKnowledgeBaseConfiguration `json:"kendraKnowledgeBaseConfiguration,omitempty"` + // Contains configurations for a knowledge base connected to an SQL database. + // Specify the SQL database type in the type field and include the corresponding + // field. For more information, see Build a knowledge base by connecting to + // a structured data source (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-build-structured.html) + // in the Amazon Bedrock User Guide. + SQLKnowledgeBaseConfiguration *SQLKnowledgeBaseConfiguration `json:"sqlKnowledgeBaseConfiguration,omitempty"` + Type *string `json:"type,omitempty"` + // Contains details about the model used to create vector embeddings for the + // knowledge base. + VectorKnowledgeBaseConfiguration *VectorKnowledgeBaseConfiguration `json:"vectorKnowledgeBaseConfiguration,omitempty"` } // Contains the details for a document that was ingested or deleted. @@ -380,9 +430,28 @@ type KnowledgeBaseSummary struct { Description *string `json:"description,omitempty"` KnowledgeBaseID *string `json:"knowledgeBaseID,omitempty"` Name *string `json:"name,omitempty"` + Status *string `json:"status,omitempty"` UpdatedAt *metav1.Time `json:"updatedAt,omitempty"` } +// Contains information about a knowledge base. +type KnowledgeBase_SDK struct { + CreatedAt *metav1.Time `json:"createdAt,omitempty"` + Description *string `json:"description,omitempty"` + FailureReasons []*string `json:"failureReasons,omitempty"` + KnowledgeBaseARN *string `json:"knowledgeBaseARN,omitempty"` + // Contains details about the vector embeddings configuration of the knowledge + // base. + KnowledgeBaseConfiguration *KnowledgeBaseConfiguration `json:"knowledgeBaseConfiguration,omitempty"` + KnowledgeBaseID *string `json:"knowledgeBaseID,omitempty"` + Name *string `json:"name,omitempty"` + RoleARN *string `json:"roleARN,omitempty"` + Status *string `json:"status,omitempty"` + // Contains the storage configuration of the knowledge base. + StorageConfiguration *StorageConfiguration `json:"storageConfiguration,omitempty"` + UpdatedAt *metav1.Time `json:"updatedAt,omitempty"` +} + // Contains configurations for a Lambda function node in the flow. You specify // the Lambda function to invoke and the inputs into the function. The output // is the response that is defined in the Lambda function. For more information, @@ -406,6 +475,47 @@ type MetadataAttributeValue struct { BooleanValue *bool `json:"booleanValue,omitempty"` } +// Contains details about the storage configuration of the knowledge base in +// MongoDB Atlas. +type MongoDBAtlasConfiguration struct { + CollectionName *string `json:"collectionName,omitempty"` + CredentialsSecretARN *string `json:"credentialsSecretARN,omitempty"` + DatabaseName *string `json:"databaseName,omitempty"` + Endpoint *string `json:"endpoint,omitempty"` + EndpointServiceName *string `json:"endpointServiceName,omitempty"` + // Contains the names of the fields to which to map information about the vector + // store. + FieldMapping *MongoDBAtlasFieldMapping `json:"fieldMapping,omitempty"` + VectorIndexName *string `json:"vectorIndexName,omitempty"` +} + +// Contains the names of the fields to which to map information about the vector +// store. +type MongoDBAtlasFieldMapping struct { + MetadataField *string `json:"metadataField,omitempty"` + TextField *string `json:"textField,omitempty"` + VectorField *string `json:"vectorField,omitempty"` +} + +// Contains details about the storage configuration of the knowledge base in +// Amazon OpenSearch Service. For more information, see Create a vector index +// in Amazon OpenSearch Service (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-setup-oss.html). +type OpenSearchServerlessConfiguration struct { + CollectionARN *string `json:"collectionARN,omitempty"` + // Contains the names of the fields to which to map information about the vector + // store. + FieldMapping *OpenSearchServerlessFieldMapping `json:"fieldMapping,omitempty"` + VectorIndexName *string `json:"vectorIndexName,omitempty"` +} + +// Contains the names of the fields to which to map information about the vector +// store. +type OpenSearchServerlessFieldMapping struct { + MetadataField *string `json:"metadataField,omitempty"` + TextField *string `json:"textField,omitempty"` + VectorField *string `json:"vectorField,omitempty"` +} + // Contains details about the Lambda function containing the orchestration logic // carried out upon invoking the custom orchestration. type OrchestrationExecutor struct { @@ -429,6 +539,24 @@ type ParameterDetail struct { Required *bool `json:"required,omitempty"` } +// Contains details about the storage configuration of the knowledge base in +// Pinecone. For more information, see Create a vector index in Pinecone (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-setup-pinecone.html). +type PineconeConfiguration struct { + ConnectionString *string `json:"connectionString,omitempty"` + CredentialsSecretARN *string `json:"credentialsSecretARN,omitempty"` + // Contains the names of the fields to which to map information about the vector + // store. + FieldMapping *PineconeFieldMapping `json:"fieldMapping,omitempty"` + Namespace *string `json:"namespace,omitempty"` +} + +// Contains the names of the fields to which to map information about the vector +// store. +type PineconeFieldMapping struct { + MetadataField *string `json:"metadataField,omitempty"` + TextField *string `json:"textField,omitempty"` +} + // Contains configurations to override a prompt template in one part of an agent // sequence. For more information, see Advanced prompts (https://docs.aws.amazon.com/bedrock/latest/userguide/advanced-prompts.html). type PromptConfiguration struct { @@ -482,12 +610,199 @@ type PromptSummary struct { Version *string `json:"version,omitempty"` } +// Contains information about a column in the current table for the query engine +// to consider. +type QueryGenerationColumn struct { + Description *string `json:"description,omitempty"` + Inclusion *string `json:"inclusion,omitempty"` + Name *string `json:"name,omitempty"` +} + +// Contains configurations for query generation. For more information, see Build +// a knowledge base by connecting to a structured data source (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-build-structured.html) +// in the Amazon Bedrock User Guide.. +type QueryGenerationConfiguration struct { + ExecutionTimeoutSeconds *int64 `json:"executionTimeoutSeconds,omitempty"` + // >Contains configurations for context to use during query generation. + GenerationContext *QueryGenerationContext `json:"generationContext,omitempty"` +} + +// >Contains configurations for context to use during query generation. +type QueryGenerationContext struct { + CuratedQueries []*CuratedQuery `json:"curatedQueries,omitempty"` + Tables []*QueryGenerationTable `json:"tables,omitempty"` +} + +// Contains information about a table for the query engine to consider. +type QueryGenerationTable struct { + Columns []*QueryGenerationColumn `json:"columns,omitempty"` + Description *string `json:"description,omitempty"` + Inclusion *string `json:"inclusion,omitempty"` + Name *string `json:"name,omitempty"` +} + +// Contains details about the storage configuration of the knowledge base in +// Amazon RDS. For more information, see Create a vector index in Amazon RDS +// (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-setup-rds.html). +type RdsConfiguration struct { + CredentialsSecretARN *string `json:"credentialsSecretARN,omitempty"` + DatabaseName *string `json:"databaseName,omitempty"` + // Contains the names of the fields to which to map information about the vector + // store. + FieldMapping *RdsFieldMapping `json:"fieldMapping,omitempty"` + ResourceARN *string `json:"resourceARN,omitempty"` + TableName *string `json:"tableName,omitempty"` +} + +// Contains the names of the fields to which to map information about the vector +// store. +type RdsFieldMapping struct { + MetadataField *string `json:"metadataField,omitempty"` + PrimaryKeyField *string `json:"primaryKeyField,omitempty"` + TextField *string `json:"textField,omitempty"` + VectorField *string `json:"vectorField,omitempty"` +} + +// Contains details about the storage configuration of the knowledge base in +// Redis Enterprise Cloud. For more information, see Create a vector index in +// Redis Enterprise Cloud (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-setup-oss.html). +type RedisEnterpriseCloudConfiguration struct { + CredentialsSecretARN *string `json:"credentialsSecretARN,omitempty"` + Endpoint *string `json:"endpoint,omitempty"` + // Contains the names of the fields to which to map information about the vector + // store. + FieldMapping *RedisEnterpriseCloudFieldMapping `json:"fieldMapping,omitempty"` + VectorIndexName *string `json:"vectorIndexName,omitempty"` +} + +// Contains the names of the fields to which to map information about the vector +// store. +type RedisEnterpriseCloudFieldMapping struct { + MetadataField *string `json:"metadataField,omitempty"` + TextField *string `json:"textField,omitempty"` + VectorField *string `json:"vectorField,omitempty"` +} + +// Contains configurations for an Amazon Redshift database. For more information, +// see Build a knowledge base by connecting to a structured data source (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-build-structured.html) +// in the Amazon Bedrock User Guide. +type RedshiftConfiguration struct { + // Contains configurations for an Amazon Redshift query engine. Specify the + // type of query engine in type and include the corresponding field. For more + // information, see Build a knowledge base by connecting to a structured data + // source (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-build-structured.html) + // in the Amazon Bedrock User Guide. + QueryEngineConfiguration *RedshiftQueryEngineConfiguration `json:"queryEngineConfiguration,omitempty"` + // Contains configurations for query generation. For more information, see Build + // a knowledge base by connecting to a structured data source (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-build-structured.html) + // in the Amazon Bedrock User Guide.. + QueryGenerationConfiguration *QueryGenerationConfiguration `json:"queryGenerationConfiguration,omitempty"` + StorageConfigurations []*RedshiftQueryEngineStorageConfiguration `json:"storageConfigurations,omitempty"` +} + // Contains configurations for authentication to an Amazon Redshift provisioned // data warehouse. Specify the type of authentication to use in the type field // and include the corresponding field. If you specify IAM authentication, you // don't need to include another field. type RedshiftProvisionedAuthConfiguration struct { - DatabaseUser *string `json:"databaseUser,omitempty"` + DatabaseUser *string `json:"databaseUser,omitempty"` + Type *string `json:"type,omitempty"` + UsernamePasswordSecretARN *string `json:"usernamePasswordSecretARN,omitempty"` +} + +// Contains configurations for a provisioned Amazon Redshift query engine. +type RedshiftProvisionedConfiguration struct { + // Contains configurations for authentication to an Amazon Redshift provisioned + // data warehouse. Specify the type of authentication to use in the type field + // and include the corresponding field. If you specify IAM authentication, you + // don't need to include another field. + AuthConfiguration *RedshiftProvisionedAuthConfiguration `json:"authConfiguration,omitempty"` + ClusterIdentifier *string `json:"clusterIdentifier,omitempty"` +} + +// Contains configurations for storage in Glue Data Catalog. +type RedshiftQueryEngineAWSDataCatalogStorageConfiguration struct { + TableNames []*string `json:"tableNames,omitempty"` +} + +// Contains configurations for an Amazon Redshift query engine. Specify the +// type of query engine in type and include the corresponding field. For more +// information, see Build a knowledge base by connecting to a structured data +// source (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-build-structured.html) +// in the Amazon Bedrock User Guide. +type RedshiftQueryEngineConfiguration struct { + // Contains configurations for a provisioned Amazon Redshift query engine. + ProvisionedConfiguration *RedshiftProvisionedConfiguration `json:"provisionedConfiguration,omitempty"` + // Contains configurations for authentication to Amazon Redshift Serverless. + ServerlessConfiguration *RedshiftServerlessConfiguration `json:"serverlessConfiguration,omitempty"` + Type *string `json:"type,omitempty"` +} + +// Contains configurations for storage in Amazon Redshift. +type RedshiftQueryEngineRedshiftStorageConfiguration struct { + DatabaseName *string `json:"databaseName,omitempty"` +} + +// Contains configurations for Amazon Redshift data storage. Specify the data +// storage service to use in the type field and include the corresponding field. +// For more information, see Build a knowledge base by connecting to a structured +// data source (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-build-structured.html) +// in the Amazon Bedrock User Guide. +type RedshiftQueryEngineStorageConfiguration struct { + // Contains configurations for storage in Glue Data Catalog. + AWSDataCatalogConfiguration *RedshiftQueryEngineAWSDataCatalogStorageConfiguration `json:"awsDataCatalogConfiguration,omitempty"` + // Contains configurations for storage in Amazon Redshift. + RedshiftConfiguration *RedshiftQueryEngineRedshiftStorageConfiguration `json:"redshiftConfiguration,omitempty"` + Type *string `json:"type_,omitempty"` +} + +// Specifies configurations for authentication to a Redshift Serverless. Specify +// the type of authentication to use in the type field and include the corresponding +// field. If you specify IAM authentication, you don't need to include another +// field. +type RedshiftServerlessAuthConfiguration struct { + Type *string `json:"type,omitempty"` + UsernamePasswordSecretARN *string `json:"usernamePasswordSecretARN,omitempty"` +} + +// Contains configurations for authentication to Amazon Redshift Serverless. +type RedshiftServerlessConfiguration struct { + // Specifies configurations for authentication to a Redshift Serverless. Specify + // the type of authentication to use in the type field and include the corresponding + // field. If you specify IAM authentication, you don't need to include another + // field. + AuthConfiguration *RedshiftServerlessAuthConfiguration `json:"authConfiguration,omitempty"` + WorkgroupARN *string `json:"workgroupARN,omitempty"` +} + +// Contains information about the content to ingest into a knowledge base connected +// to an Amazon S3 data source. +type S3Content struct { + // An Amazon S3 location. + S3Location *S3Location `json:"s3Location,omitempty"` +} + +// An Amazon S3 location. +type S3Location struct { + URI *string `json:"uri,omitempty"` +} + +// Contains configurations for a knowledge base connected to an SQL database. +// Specify the SQL database type in the type field and include the corresponding +// field. For more information, see Build a knowledge base by connecting to +// a structured data source (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-build-structured.html) +// in the Amazon Bedrock User Guide. +type SQLKnowledgeBaseConfiguration struct { + // Contains configurations for an Amazon Redshift database. For more information, + // see Build a knowledge base by connecting to a structured data source (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-build-structured.html) + // in the Amazon Bedrock User Guide. + RedshiftConfiguration *RedshiftConfiguration `json:"redshiftConfiguration,omitempty"` + Type *string `json:"type,omitempty"` +} + +// The endpoint information to connect to your Salesforce data source. +type SalesforceSourceConfiguration struct { + CredentialsSecretARN *string `json:"credentialsSecretARN,omitempty"` } // Contains the configuration for server-side encryption. @@ -500,7 +815,62 @@ type SessionSummaryConfiguration struct { MaxRecentSessions *int64 `json:"maxRecentSessions,omitempty"` } +// The endpoint information to connect to your SharePoint data source. +type SharePointSourceConfiguration struct { + CredentialsSecretARN *string `json:"credentialsSecretARN,omitempty"` +} + +// Contains the storage configuration of the knowledge base. +type StorageConfiguration struct { + // Contains details about the storage configuration of the knowledge base in + // MongoDB Atlas. + MongoDBAtlasConfiguration *MongoDBAtlasConfiguration `json:"mongoDBAtlasConfiguration,omitempty"` + // Contains details about the storage configuration of the knowledge base in + // Amazon OpenSearch Service. For more information, see Create a vector index + // in Amazon OpenSearch Service (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-setup-oss.html). + OpensearchServerlessConfiguration *OpenSearchServerlessConfiguration `json:"opensearchServerlessConfiguration,omitempty"` + // Contains details about the storage configuration of the knowledge base in + // Pinecone. For more information, see Create a vector index in Pinecone (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-setup-pinecone.html). + PineconeConfiguration *PineconeConfiguration `json:"pineconeConfiguration,omitempty"` + // Contains details about the storage configuration of the knowledge base in + // Amazon RDS. For more information, see Create a vector index in Amazon RDS + // (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-setup-rds.html). + RdsConfiguration *RdsConfiguration `json:"rdsConfiguration,omitempty"` + // Contains details about the storage configuration of the knowledge base in + // Redis Enterprise Cloud. For more information, see Create a vector index in + // Redis Enterprise Cloud (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-setup-oss.html). + RedisEnterpriseCloudConfiguration *RedisEnterpriseCloudConfiguration `json:"redisEnterpriseCloudConfiguration,omitempty"` + Type *string `json:"type,omitempty"` +} + +// Specifies configurations for the storage location of the images extracted +// from multimodal documents in your data source. These images can be retrieved +// and returned to the end user. +type SupplementalDataStorageConfiguration struct { + StorageLocations []*SupplementalDataStorageLocation `json:"storageLocations,omitempty"` +} + +// Contains information about a storage location for images extracted from multimodal +// documents in your data source. +type SupplementalDataStorageLocation struct { + // An Amazon S3 location. + S3Location *S3Location `json:"s3Location,omitempty"` + Type *string `json:"type_,omitempty"` +} + // A Lambda function that processes documents. type TransformationLambdaConfiguration struct { LambdaARN *string `json:"lambdaARN,omitempty"` } + +// Contains details about the model used to create vector embeddings for the +// knowledge base. +type VectorKnowledgeBaseConfiguration struct { + EmbeddingModelARN *string `json:"embeddingModelARN,omitempty"` + // The configuration details for the embeddings model. + EmbeddingModelConfiguration *EmbeddingModelConfiguration `json:"embeddingModelConfiguration,omitempty"` + // Specifies configurations for the storage location of the images extracted + // from multimodal documents in your data source. These images can be retrieved + // and returned to the end user. + SupplementalDataStorageConfiguration *SupplementalDataStorageConfiguration `json:"supplementalDataStorageConfiguration,omitempty"` +} diff --git a/apis/v1alpha1/zz_generated.deepcopy.go b/apis/v1alpha1/zz_generated.deepcopy.go index ea7d0fd..650ea2e 100644 --- a/apis/v1alpha1/zz_generated.deepcopy.go +++ b/apis/v1alpha1/zz_generated.deepcopy.go @@ -1020,6 +1020,31 @@ func (in *Agent_SDK) DeepCopy() *Agent_SDK { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BedrockEmbeddingModelConfiguration) DeepCopyInto(out *BedrockEmbeddingModelConfiguration) { + *out = *in + if in.Dimensions != nil { + in, out := &in.Dimensions, &out.Dimensions + *out = new(int64) + **out = **in + } + if in.EmbeddingDataType != nil { + in, out := &in.EmbeddingDataType, &out.EmbeddingDataType + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BedrockEmbeddingModelConfiguration. +func (in *BedrockEmbeddingModelConfiguration) DeepCopy() *BedrockEmbeddingModelConfiguration { + if in == nil { + return nil + } + out := new(BedrockEmbeddingModelConfiguration) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ByteContentDoc) DeepCopyInto(out *ByteContentDoc) { *out = *in @@ -1040,6 +1065,26 @@ func (in *ByteContentDoc) DeepCopy() *ByteContentDoc { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ConfluenceSourceConfiguration) DeepCopyInto(out *ConfluenceSourceConfiguration) { + *out = *in + if in.CredentialsSecretARN != nil { + in, out := &in.CredentialsSecretARN, &out.CredentialsSecretARN + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfluenceSourceConfiguration. +func (in *ConfluenceSourceConfiguration) DeepCopy() *ConfluenceSourceConfiguration { + if in == nil { + return nil + } + out := new(ConfluenceSourceConfiguration) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ContentBlock) DeepCopyInto(out *ContentBlock) { *out = *in @@ -1060,6 +1105,31 @@ func (in *ContentBlock) DeepCopy() *ContentBlock { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CuratedQuery) DeepCopyInto(out *CuratedQuery) { + *out = *in + if in.NATuralLanguage != nil { + in, out := &in.NATuralLanguage, &out.NATuralLanguage + *out = new(string) + **out = **in + } + if in.SQL != nil { + in, out := &in.SQL, &out.SQL + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CuratedQuery. +func (in *CuratedQuery) DeepCopy() *CuratedQuery { + if in == nil { + return nil + } + out := new(CuratedQuery) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CustomDocumentIdentifier) DeepCopyInto(out *CustomDocumentIdentifier) { *out = *in @@ -1193,6 +1263,46 @@ func (in *DataSourceSummary) DeepCopy() *DataSourceSummary { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DocumentIdentifier) DeepCopyInto(out *DocumentIdentifier) { + *out = *in + if in.S3 != nil { + in, out := &in.S3, &out.S3 + *out = new(S3Location) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DocumentIdentifier. +func (in *DocumentIdentifier) DeepCopy() *DocumentIdentifier { + if in == nil { + return nil + } + out := new(DocumentIdentifier) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *EmbeddingModelConfiguration) DeepCopyInto(out *EmbeddingModelConfiguration) { + *out = *in + if in.BedrockEmbeddingModelConfiguration != nil { + in, out := &in.BedrockEmbeddingModelConfiguration, &out.BedrockEmbeddingModelConfiguration + *out = new(BedrockEmbeddingModelConfiguration) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EmbeddingModelConfiguration. +func (in *EmbeddingModelConfiguration) DeepCopy() *EmbeddingModelConfiguration { + if in == nil { + return nil + } + out := new(EmbeddingModelConfiguration) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *FlowAliasRoutingConfigurationListItem) DeepCopyInto(out *FlowAliasRoutingConfigurationListItem) { *out = *in @@ -1482,50 +1592,103 @@ func (in *IngestionJobSummary) DeepCopy() *IngestionJobSummary { } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KnowledgeBase) DeepCopyInto(out *KnowledgeBase) { +func (in *IntermediateStorage) DeepCopyInto(out *IntermediateStorage) { *out = *in - if in.CreatedAt != nil { - in, out := &in.CreatedAt, &out.CreatedAt - *out = (*in).DeepCopy() + if in.S3Location != nil { + in, out := &in.S3Location, &out.S3Location + *out = new(S3Location) + (*in).DeepCopyInto(*out) } - if in.Description != nil { - in, out := &in.Description, &out.Description +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IntermediateStorage. +func (in *IntermediateStorage) DeepCopy() *IntermediateStorage { + if in == nil { + return nil + } + out := new(IntermediateStorage) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KendraKnowledgeBaseConfiguration) DeepCopyInto(out *KendraKnowledgeBaseConfiguration) { + *out = *in + if in.KendraIndexARN != nil { + in, out := &in.KendraIndexARN, &out.KendraIndexARN *out = new(string) **out = **in } - if in.FailureReasons != nil { - in, out := &in.FailureReasons, &out.FailureReasons - *out = make([]*string, len(*in)) - for i := range *in { - if (*in)[i] != nil { - in, out := &(*in)[i], &(*out)[i] - *out = new(string) - **out = **in - } - } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KendraKnowledgeBaseConfiguration. +func (in *KendraKnowledgeBaseConfiguration) DeepCopy() *KendraKnowledgeBaseConfiguration { + if in == nil { + return nil } - if in.KnowledgeBaseID != nil { - in, out := &in.KnowledgeBaseID, &out.KnowledgeBaseID - *out = new(string) - **out = **in + out := new(KendraKnowledgeBaseConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KnowledgeBase) DeepCopyInto(out *KnowledgeBase) { + *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 KnowledgeBase. +func (in *KnowledgeBase) DeepCopy() *KnowledgeBase { + if in == nil { + return nil } - if in.Name != nil { - in, out := &in.Name, &out.Name + out := new(KnowledgeBase) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *KnowledgeBase) 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 *KnowledgeBaseConfiguration) DeepCopyInto(out *KnowledgeBaseConfiguration) { + *out = *in + if in.KendraKnowledgeBaseConfiguration != nil { + in, out := &in.KendraKnowledgeBaseConfiguration, &out.KendraKnowledgeBaseConfiguration + *out = new(KendraKnowledgeBaseConfiguration) + (*in).DeepCopyInto(*out) + } + if in.SQLKnowledgeBaseConfiguration != nil { + in, out := &in.SQLKnowledgeBaseConfiguration, &out.SQLKnowledgeBaseConfiguration + *out = new(SQLKnowledgeBaseConfiguration) + (*in).DeepCopyInto(*out) + } + if in.Type != nil { + in, out := &in.Type, &out.Type *out = new(string) **out = **in } - if in.UpdatedAt != nil { - in, out := &in.UpdatedAt, &out.UpdatedAt - *out = (*in).DeepCopy() + if in.VectorKnowledgeBaseConfiguration != nil { + in, out := &in.VectorKnowledgeBaseConfiguration, &out.VectorKnowledgeBaseConfiguration + *out = new(VectorKnowledgeBaseConfiguration) + (*in).DeepCopyInto(*out) } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KnowledgeBase. -func (in *KnowledgeBase) DeepCopy() *KnowledgeBase { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KnowledgeBaseConfiguration. +func (in *KnowledgeBaseConfiguration) DeepCopy() *KnowledgeBaseConfiguration { if in == nil { return nil } - out := new(KnowledgeBase) + out := new(KnowledgeBaseConfiguration) in.DeepCopyInto(out) return out } @@ -1585,64 +1748,118 @@ func (in *KnowledgeBaseFlowNodeConfiguration) DeepCopy() *KnowledgeBaseFlowNodeC } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KnowledgeBaseSummary) DeepCopyInto(out *KnowledgeBaseSummary) { +func (in *KnowledgeBaseList) DeepCopyInto(out *KnowledgeBaseList) { *out = *in - if in.Description != nil { - in, out := &in.Description, &out.Description - *out = new(string) - **out = **in - } - if in.KnowledgeBaseID != nil { - in, out := &in.KnowledgeBaseID, &out.KnowledgeBaseID - *out = new(string) - **out = **in - } - if in.Name != nil { - in, out := &in.Name, &out.Name - *out = new(string) - **out = **in - } - if in.UpdatedAt != nil { - in, out := &in.UpdatedAt, &out.UpdatedAt - *out = (*in).DeepCopy() + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]KnowledgeBase, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KnowledgeBaseSummary. -func (in *KnowledgeBaseSummary) DeepCopy() *KnowledgeBaseSummary { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KnowledgeBaseList. +func (in *KnowledgeBaseList) DeepCopy() *KnowledgeBaseList { if in == nil { return nil } - out := new(KnowledgeBaseSummary) + out := new(KnowledgeBaseList) in.DeepCopyInto(out) return out } +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *KnowledgeBaseList) 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 *LambdaFunctionFlowNodeConfiguration) DeepCopyInto(out *LambdaFunctionFlowNodeConfiguration) { +func (in *KnowledgeBaseSpec) DeepCopyInto(out *KnowledgeBaseSpec) { *out = *in - if in.LambdaARN != nil { - in, out := &in.LambdaARN, &out.LambdaARN + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.KnowledgeBaseConfiguration != nil { + in, out := &in.KnowledgeBaseConfiguration, &out.KnowledgeBaseConfiguration + *out = new(KnowledgeBaseConfiguration) + (*in).DeepCopyInto(*out) + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.RoleARN != nil { + in, out := &in.RoleARN, &out.RoleARN *out = new(string) **out = **in } + if in.StorageConfiguration != nil { + in, out := &in.StorageConfiguration, &out.StorageConfiguration + *out = new(StorageConfiguration) + (*in).DeepCopyInto(*out) + } + if in.Tags != nil { + in, out := &in.Tags, &out.Tags + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LambdaFunctionFlowNodeConfiguration. -func (in *LambdaFunctionFlowNodeConfiguration) DeepCopy() *LambdaFunctionFlowNodeConfiguration { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KnowledgeBaseSpec. +func (in *KnowledgeBaseSpec) DeepCopy() *KnowledgeBaseSpec { if in == nil { return nil } - out := new(LambdaFunctionFlowNodeConfiguration) + out := new(KnowledgeBaseSpec) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *MemoryConfiguration) DeepCopyInto(out *MemoryConfiguration) { +func (in *KnowledgeBaseStatus) DeepCopyInto(out *KnowledgeBaseStatus) { *out = *in - if in.EnabledMemoryTypes != nil { - in, out := &in.EnabledMemoryTypes, &out.EnabledMemoryTypes + if in.ACKResourceMetadata != nil { + in, out := &in.ACKResourceMetadata, &out.ACKResourceMetadata + *out = new(corev1alpha1.ResourceMetadata) + (*in).DeepCopyInto(*out) + } + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]*corev1alpha1.Condition, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(corev1alpha1.Condition) + (*in).DeepCopyInto(*out) + } + } + } + if in.CreatedAt != nil { + in, out := &in.CreatedAt, &out.CreatedAt + *out = (*in).DeepCopy() + } + if in.FailureReasons != nil { + in, out := &in.FailureReasons, &out.FailureReasons *out = make([]*string, len(*in)) for i := range *in { if (*in)[i] != nil { @@ -1652,11 +1869,184 @@ func (in *MemoryConfiguration) DeepCopyInto(out *MemoryConfiguration) { } } } - if in.SessionSummaryConfiguration != nil { - in, out := &in.SessionSummaryConfiguration, &out.SessionSummaryConfiguration - *out = new(SessionSummaryConfiguration) - (*in).DeepCopyInto(*out) - } + if in.KnowledgeBaseID != nil { + in, out := &in.KnowledgeBaseID, &out.KnowledgeBaseID + *out = new(string) + **out = **in + } + if in.Status != nil { + in, out := &in.Status, &out.Status + *out = new(string) + **out = **in + } + if in.UpdatedAt != nil { + in, out := &in.UpdatedAt, &out.UpdatedAt + *out = (*in).DeepCopy() + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KnowledgeBaseStatus. +func (in *KnowledgeBaseStatus) DeepCopy() *KnowledgeBaseStatus { + if in == nil { + return nil + } + out := new(KnowledgeBaseStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KnowledgeBaseSummary) DeepCopyInto(out *KnowledgeBaseSummary) { + *out = *in + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.KnowledgeBaseID != nil { + in, out := &in.KnowledgeBaseID, &out.KnowledgeBaseID + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.Status != nil { + in, out := &in.Status, &out.Status + *out = new(string) + **out = **in + } + if in.UpdatedAt != nil { + in, out := &in.UpdatedAt, &out.UpdatedAt + *out = (*in).DeepCopy() + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KnowledgeBaseSummary. +func (in *KnowledgeBaseSummary) DeepCopy() *KnowledgeBaseSummary { + if in == nil { + return nil + } + out := new(KnowledgeBaseSummary) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KnowledgeBase_SDK) DeepCopyInto(out *KnowledgeBase_SDK) { + *out = *in + if in.CreatedAt != nil { + in, out := &in.CreatedAt, &out.CreatedAt + *out = (*in).DeepCopy() + } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.FailureReasons != nil { + in, out := &in.FailureReasons, &out.FailureReasons + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.KnowledgeBaseARN != nil { + in, out := &in.KnowledgeBaseARN, &out.KnowledgeBaseARN + *out = new(string) + **out = **in + } + if in.KnowledgeBaseConfiguration != nil { + in, out := &in.KnowledgeBaseConfiguration, &out.KnowledgeBaseConfiguration + *out = new(KnowledgeBaseConfiguration) + (*in).DeepCopyInto(*out) + } + if in.KnowledgeBaseID != nil { + in, out := &in.KnowledgeBaseID, &out.KnowledgeBaseID + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.RoleARN != nil { + in, out := &in.RoleARN, &out.RoleARN + *out = new(string) + **out = **in + } + if in.Status != nil { + in, out := &in.Status, &out.Status + *out = new(string) + **out = **in + } + if in.StorageConfiguration != nil { + in, out := &in.StorageConfiguration, &out.StorageConfiguration + *out = new(StorageConfiguration) + (*in).DeepCopyInto(*out) + } + if in.UpdatedAt != nil { + in, out := &in.UpdatedAt, &out.UpdatedAt + *out = (*in).DeepCopy() + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KnowledgeBase_SDK. +func (in *KnowledgeBase_SDK) DeepCopy() *KnowledgeBase_SDK { + if in == nil { + return nil + } + out := new(KnowledgeBase_SDK) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LambdaFunctionFlowNodeConfiguration) DeepCopyInto(out *LambdaFunctionFlowNodeConfiguration) { + *out = *in + if in.LambdaARN != nil { + in, out := &in.LambdaARN, &out.LambdaARN + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LambdaFunctionFlowNodeConfiguration. +func (in *LambdaFunctionFlowNodeConfiguration) DeepCopy() *LambdaFunctionFlowNodeConfiguration { + if in == nil { + return nil + } + out := new(LambdaFunctionFlowNodeConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MemoryConfiguration) DeepCopyInto(out *MemoryConfiguration) { + *out = *in + if in.EnabledMemoryTypes != nil { + in, out := &in.EnabledMemoryTypes, &out.EnabledMemoryTypes + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.SessionSummaryConfiguration != nil { + in, out := &in.SessionSummaryConfiguration, &out.SessionSummaryConfiguration + *out = new(SessionSummaryConfiguration) + (*in).DeepCopyInto(*out) + } if in.StorageDays != nil { in, out := &in.StorageDays, &out.StorageDays *out = new(int64) @@ -1664,262 +2054,1047 @@ func (in *MemoryConfiguration) DeepCopyInto(out *MemoryConfiguration) { } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MemoryConfiguration. -func (in *MemoryConfiguration) DeepCopy() *MemoryConfiguration { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MemoryConfiguration. +func (in *MemoryConfiguration) DeepCopy() *MemoryConfiguration { + if in == nil { + return nil + } + out := new(MemoryConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MetadataAttributeValue) DeepCopyInto(out *MetadataAttributeValue) { + *out = *in + if in.BooleanValue != nil { + in, out := &in.BooleanValue, &out.BooleanValue + *out = new(bool) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MetadataAttributeValue. +func (in *MetadataAttributeValue) DeepCopy() *MetadataAttributeValue { + if in == nil { + return nil + } + out := new(MetadataAttributeValue) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MongoDBAtlasConfiguration) DeepCopyInto(out *MongoDBAtlasConfiguration) { + *out = *in + if in.CollectionName != nil { + in, out := &in.CollectionName, &out.CollectionName + *out = new(string) + **out = **in + } + if in.CredentialsSecretARN != nil { + in, out := &in.CredentialsSecretARN, &out.CredentialsSecretARN + *out = new(string) + **out = **in + } + if in.DatabaseName != nil { + in, out := &in.DatabaseName, &out.DatabaseName + *out = new(string) + **out = **in + } + if in.Endpoint != nil { + in, out := &in.Endpoint, &out.Endpoint + *out = new(string) + **out = **in + } + if in.EndpointServiceName != nil { + in, out := &in.EndpointServiceName, &out.EndpointServiceName + *out = new(string) + **out = **in + } + if in.FieldMapping != nil { + in, out := &in.FieldMapping, &out.FieldMapping + *out = new(MongoDBAtlasFieldMapping) + (*in).DeepCopyInto(*out) + } + if in.VectorIndexName != nil { + in, out := &in.VectorIndexName, &out.VectorIndexName + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MongoDBAtlasConfiguration. +func (in *MongoDBAtlasConfiguration) DeepCopy() *MongoDBAtlasConfiguration { + if in == nil { + return nil + } + out := new(MongoDBAtlasConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MongoDBAtlasFieldMapping) DeepCopyInto(out *MongoDBAtlasFieldMapping) { + *out = *in + if in.MetadataField != nil { + in, out := &in.MetadataField, &out.MetadataField + *out = new(string) + **out = **in + } + if in.TextField != nil { + in, out := &in.TextField, &out.TextField + *out = new(string) + **out = **in + } + if in.VectorField != nil { + in, out := &in.VectorField, &out.VectorField + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MongoDBAtlasFieldMapping. +func (in *MongoDBAtlasFieldMapping) DeepCopy() *MongoDBAtlasFieldMapping { + if in == nil { + return nil + } + out := new(MongoDBAtlasFieldMapping) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OpenSearchServerlessConfiguration) DeepCopyInto(out *OpenSearchServerlessConfiguration) { + *out = *in + if in.CollectionARN != nil { + in, out := &in.CollectionARN, &out.CollectionARN + *out = new(string) + **out = **in + } + if in.FieldMapping != nil { + in, out := &in.FieldMapping, &out.FieldMapping + *out = new(OpenSearchServerlessFieldMapping) + (*in).DeepCopyInto(*out) + } + if in.VectorIndexName != nil { + in, out := &in.VectorIndexName, &out.VectorIndexName + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OpenSearchServerlessConfiguration. +func (in *OpenSearchServerlessConfiguration) DeepCopy() *OpenSearchServerlessConfiguration { + if in == nil { + return nil + } + out := new(OpenSearchServerlessConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OpenSearchServerlessFieldMapping) DeepCopyInto(out *OpenSearchServerlessFieldMapping) { + *out = *in + if in.MetadataField != nil { + in, out := &in.MetadataField, &out.MetadataField + *out = new(string) + **out = **in + } + if in.TextField != nil { + in, out := &in.TextField, &out.TextField + *out = new(string) + **out = **in + } + if in.VectorField != nil { + in, out := &in.VectorField, &out.VectorField + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OpenSearchServerlessFieldMapping. +func (in *OpenSearchServerlessFieldMapping) DeepCopy() *OpenSearchServerlessFieldMapping { + if in == nil { + return nil + } + out := new(OpenSearchServerlessFieldMapping) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OrchestrationExecutor) DeepCopyInto(out *OrchestrationExecutor) { + *out = *in + if in.Lambda != nil { + in, out := &in.Lambda, &out.Lambda + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OrchestrationExecutor. +func (in *OrchestrationExecutor) DeepCopy() *OrchestrationExecutor { + if in == nil { + return nil + } + out := new(OrchestrationExecutor) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ParameterDetail) DeepCopyInto(out *ParameterDetail) { + *out = *in + if in.Required != nil { + in, out := &in.Required, &out.Required + *out = new(bool) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ParameterDetail. +func (in *ParameterDetail) DeepCopy() *ParameterDetail { + if in == nil { + return nil + } + out := new(ParameterDetail) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PineconeConfiguration) DeepCopyInto(out *PineconeConfiguration) { + *out = *in + if in.ConnectionString != nil { + in, out := &in.ConnectionString, &out.ConnectionString + *out = new(string) + **out = **in + } + if in.CredentialsSecretARN != nil { + in, out := &in.CredentialsSecretARN, &out.CredentialsSecretARN + *out = new(string) + **out = **in + } + if in.FieldMapping != nil { + in, out := &in.FieldMapping, &out.FieldMapping + *out = new(PineconeFieldMapping) + (*in).DeepCopyInto(*out) + } + if in.Namespace != nil { + in, out := &in.Namespace, &out.Namespace + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PineconeConfiguration. +func (in *PineconeConfiguration) DeepCopy() *PineconeConfiguration { + if in == nil { + return nil + } + out := new(PineconeConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PineconeFieldMapping) DeepCopyInto(out *PineconeFieldMapping) { + *out = *in + if in.MetadataField != nil { + in, out := &in.MetadataField, &out.MetadataField + *out = new(string) + **out = **in + } + if in.TextField != nil { + in, out := &in.TextField, &out.TextField + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PineconeFieldMapping. +func (in *PineconeFieldMapping) DeepCopy() *PineconeFieldMapping { + if in == nil { + return nil + } + out := new(PineconeFieldMapping) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PromptConfiguration) DeepCopyInto(out *PromptConfiguration) { + *out = *in + if in.BasePromptTemplate != nil { + in, out := &in.BasePromptTemplate, &out.BasePromptTemplate + *out = new(string) + **out = **in + } + if in.FoundationModel != nil { + in, out := &in.FoundationModel, &out.FoundationModel + *out = new(string) + **out = **in + } + if in.InferenceConfiguration != nil { + in, out := &in.InferenceConfiguration, &out.InferenceConfiguration + *out = new(InferenceConfiguration) + (*in).DeepCopyInto(*out) + } + if in.ParserMode != nil { + in, out := &in.ParserMode, &out.ParserMode + *out = new(string) + **out = **in + } + if in.PromptCreationMode != nil { + in, out := &in.PromptCreationMode, &out.PromptCreationMode + *out = new(string) + **out = **in + } + if in.PromptState != nil { + in, out := &in.PromptState, &out.PromptState + *out = new(string) + **out = **in + } + if in.PromptType != nil { + in, out := &in.PromptType, &out.PromptType + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PromptConfiguration. +func (in *PromptConfiguration) DeepCopy() *PromptConfiguration { + if in == nil { + return nil + } + out := new(PromptConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PromptFlowNodeConfiguration) DeepCopyInto(out *PromptFlowNodeConfiguration) { + *out = *in + if in.GuardrailConfiguration != nil { + in, out := &in.GuardrailConfiguration, &out.GuardrailConfiguration + *out = new(GuardrailConfiguration) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PromptFlowNodeConfiguration. +func (in *PromptFlowNodeConfiguration) DeepCopy() *PromptFlowNodeConfiguration { + if in == nil { + return nil + } + out := new(PromptFlowNodeConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PromptModelInferenceConfiguration) DeepCopyInto(out *PromptModelInferenceConfiguration) { + *out = *in + if in.MaxTokens != nil { + in, out := &in.MaxTokens, &out.MaxTokens + *out = new(int64) + **out = **in + } + if in.StopSequences != nil { + in, out := &in.StopSequences, &out.StopSequences + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.Temperature != nil { + in, out := &in.Temperature, &out.Temperature + *out = new(float64) + **out = **in + } + if in.TopP != nil { + in, out := &in.TopP, &out.TopP + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PromptModelInferenceConfiguration. +func (in *PromptModelInferenceConfiguration) DeepCopy() *PromptModelInferenceConfiguration { + if in == nil { + return nil + } + out := new(PromptModelInferenceConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PromptOverrideConfiguration) DeepCopyInto(out *PromptOverrideConfiguration) { + *out = *in + if in.OverrideLambda != nil { + in, out := &in.OverrideLambda, &out.OverrideLambda + *out = new(string) + **out = **in + } + if in.PromptConfigurations != nil { + in, out := &in.PromptConfigurations, &out.PromptConfigurations + *out = make([]*PromptConfiguration, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(PromptConfiguration) + (*in).DeepCopyInto(*out) + } + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PromptOverrideConfiguration. +func (in *PromptOverrideConfiguration) DeepCopy() *PromptOverrideConfiguration { + if in == nil { + return nil + } + out := new(PromptOverrideConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PromptSummary) DeepCopyInto(out *PromptSummary) { + *out = *in + if in.CreatedAt != nil { + in, out := &in.CreatedAt, &out.CreatedAt + *out = (*in).DeepCopy() + } + if in.UpdatedAt != nil { + in, out := &in.UpdatedAt, &out.UpdatedAt + *out = (*in).DeepCopy() + } + if in.Version != nil { + in, out := &in.Version, &out.Version + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PromptSummary. +func (in *PromptSummary) DeepCopy() *PromptSummary { + if in == nil { + return nil + } + out := new(PromptSummary) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *QueryGenerationColumn) DeepCopyInto(out *QueryGenerationColumn) { + *out = *in + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.Inclusion != nil { + in, out := &in.Inclusion, &out.Inclusion + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new QueryGenerationColumn. +func (in *QueryGenerationColumn) DeepCopy() *QueryGenerationColumn { + if in == nil { + return nil + } + out := new(QueryGenerationColumn) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *QueryGenerationConfiguration) DeepCopyInto(out *QueryGenerationConfiguration) { + *out = *in + if in.ExecutionTimeoutSeconds != nil { + in, out := &in.ExecutionTimeoutSeconds, &out.ExecutionTimeoutSeconds + *out = new(int64) + **out = **in + } + if in.GenerationContext != nil { + in, out := &in.GenerationContext, &out.GenerationContext + *out = new(QueryGenerationContext) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new QueryGenerationConfiguration. +func (in *QueryGenerationConfiguration) DeepCopy() *QueryGenerationConfiguration { + if in == nil { + return nil + } + out := new(QueryGenerationConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *QueryGenerationContext) DeepCopyInto(out *QueryGenerationContext) { + *out = *in + if in.CuratedQueries != nil { + in, out := &in.CuratedQueries, &out.CuratedQueries + *out = make([]*CuratedQuery, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(CuratedQuery) + (*in).DeepCopyInto(*out) + } + } + } + if in.Tables != nil { + in, out := &in.Tables, &out.Tables + *out = make([]*QueryGenerationTable, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(QueryGenerationTable) + (*in).DeepCopyInto(*out) + } + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new QueryGenerationContext. +func (in *QueryGenerationContext) DeepCopy() *QueryGenerationContext { + if in == nil { + return nil + } + out := new(QueryGenerationContext) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *QueryGenerationTable) DeepCopyInto(out *QueryGenerationTable) { + *out = *in + if in.Columns != nil { + in, out := &in.Columns, &out.Columns + *out = make([]*QueryGenerationColumn, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(QueryGenerationColumn) + (*in).DeepCopyInto(*out) + } + } + } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.Inclusion != nil { + in, out := &in.Inclusion, &out.Inclusion + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new QueryGenerationTable. +func (in *QueryGenerationTable) DeepCopy() *QueryGenerationTable { + if in == nil { + return nil + } + out := new(QueryGenerationTable) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RdsConfiguration) DeepCopyInto(out *RdsConfiguration) { + *out = *in + if in.CredentialsSecretARN != nil { + in, out := &in.CredentialsSecretARN, &out.CredentialsSecretARN + *out = new(string) + **out = **in + } + if in.DatabaseName != nil { + in, out := &in.DatabaseName, &out.DatabaseName + *out = new(string) + **out = **in + } + if in.FieldMapping != nil { + in, out := &in.FieldMapping, &out.FieldMapping + *out = new(RdsFieldMapping) + (*in).DeepCopyInto(*out) + } + if in.ResourceARN != nil { + in, out := &in.ResourceARN, &out.ResourceARN + *out = new(string) + **out = **in + } + if in.TableName != nil { + in, out := &in.TableName, &out.TableName + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RdsConfiguration. +func (in *RdsConfiguration) DeepCopy() *RdsConfiguration { + if in == nil { + return nil + } + out := new(RdsConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RdsFieldMapping) DeepCopyInto(out *RdsFieldMapping) { + *out = *in + if in.MetadataField != nil { + in, out := &in.MetadataField, &out.MetadataField + *out = new(string) + **out = **in + } + if in.PrimaryKeyField != nil { + in, out := &in.PrimaryKeyField, &out.PrimaryKeyField + *out = new(string) + **out = **in + } + if in.TextField != nil { + in, out := &in.TextField, &out.TextField + *out = new(string) + **out = **in + } + if in.VectorField != nil { + in, out := &in.VectorField, &out.VectorField + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RdsFieldMapping. +func (in *RdsFieldMapping) DeepCopy() *RdsFieldMapping { + if in == nil { + return nil + } + out := new(RdsFieldMapping) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RedisEnterpriseCloudConfiguration) DeepCopyInto(out *RedisEnterpriseCloudConfiguration) { + *out = *in + if in.CredentialsSecretARN != nil { + in, out := &in.CredentialsSecretARN, &out.CredentialsSecretARN + *out = new(string) + **out = **in + } + if in.Endpoint != nil { + in, out := &in.Endpoint, &out.Endpoint + *out = new(string) + **out = **in + } + if in.FieldMapping != nil { + in, out := &in.FieldMapping, &out.FieldMapping + *out = new(RedisEnterpriseCloudFieldMapping) + (*in).DeepCopyInto(*out) + } + if in.VectorIndexName != nil { + in, out := &in.VectorIndexName, &out.VectorIndexName + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RedisEnterpriseCloudConfiguration. +func (in *RedisEnterpriseCloudConfiguration) DeepCopy() *RedisEnterpriseCloudConfiguration { + if in == nil { + return nil + } + out := new(RedisEnterpriseCloudConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RedisEnterpriseCloudFieldMapping) DeepCopyInto(out *RedisEnterpriseCloudFieldMapping) { + *out = *in + if in.MetadataField != nil { + in, out := &in.MetadataField, &out.MetadataField + *out = new(string) + **out = **in + } + if in.TextField != nil { + in, out := &in.TextField, &out.TextField + *out = new(string) + **out = **in + } + if in.VectorField != nil { + in, out := &in.VectorField, &out.VectorField + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RedisEnterpriseCloudFieldMapping. +func (in *RedisEnterpriseCloudFieldMapping) DeepCopy() *RedisEnterpriseCloudFieldMapping { + if in == nil { + return nil + } + out := new(RedisEnterpriseCloudFieldMapping) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RedshiftConfiguration) DeepCopyInto(out *RedshiftConfiguration) { + *out = *in + if in.QueryEngineConfiguration != nil { + in, out := &in.QueryEngineConfiguration, &out.QueryEngineConfiguration + *out = new(RedshiftQueryEngineConfiguration) + (*in).DeepCopyInto(*out) + } + if in.QueryGenerationConfiguration != nil { + in, out := &in.QueryGenerationConfiguration, &out.QueryGenerationConfiguration + *out = new(QueryGenerationConfiguration) + (*in).DeepCopyInto(*out) + } + if in.StorageConfigurations != nil { + in, out := &in.StorageConfigurations, &out.StorageConfigurations + *out = make([]*RedshiftQueryEngineStorageConfiguration, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(RedshiftQueryEngineStorageConfiguration) + (*in).DeepCopyInto(*out) + } + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RedshiftConfiguration. +func (in *RedshiftConfiguration) DeepCopy() *RedshiftConfiguration { + if in == nil { + return nil + } + out := new(RedshiftConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RedshiftProvisionedAuthConfiguration) DeepCopyInto(out *RedshiftProvisionedAuthConfiguration) { + *out = *in + if in.DatabaseUser != nil { + in, out := &in.DatabaseUser, &out.DatabaseUser + *out = new(string) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.UsernamePasswordSecretARN != nil { + in, out := &in.UsernamePasswordSecretARN, &out.UsernamePasswordSecretARN + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RedshiftProvisionedAuthConfiguration. +func (in *RedshiftProvisionedAuthConfiguration) DeepCopy() *RedshiftProvisionedAuthConfiguration { if in == nil { return nil } - out := new(MemoryConfiguration) + out := new(RedshiftProvisionedAuthConfiguration) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *MetadataAttributeValue) DeepCopyInto(out *MetadataAttributeValue) { +func (in *RedshiftProvisionedConfiguration) DeepCopyInto(out *RedshiftProvisionedConfiguration) { *out = *in - if in.BooleanValue != nil { - in, out := &in.BooleanValue, &out.BooleanValue - *out = new(bool) + if in.AuthConfiguration != nil { + in, out := &in.AuthConfiguration, &out.AuthConfiguration + *out = new(RedshiftProvisionedAuthConfiguration) + (*in).DeepCopyInto(*out) + } + if in.ClusterIdentifier != nil { + in, out := &in.ClusterIdentifier, &out.ClusterIdentifier + *out = new(string) **out = **in } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MetadataAttributeValue. -func (in *MetadataAttributeValue) DeepCopy() *MetadataAttributeValue { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RedshiftProvisionedConfiguration. +func (in *RedshiftProvisionedConfiguration) DeepCopy() *RedshiftProvisionedConfiguration { if in == nil { return nil } - out := new(MetadataAttributeValue) + out := new(RedshiftProvisionedConfiguration) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *OrchestrationExecutor) DeepCopyInto(out *OrchestrationExecutor) { +func (in *RedshiftQueryEngineAWSDataCatalogStorageConfiguration) DeepCopyInto(out *RedshiftQueryEngineAWSDataCatalogStorageConfiguration) { *out = *in - if in.Lambda != nil { - in, out := &in.Lambda, &out.Lambda - *out = new(string) - **out = **in + if in.TableNames != nil { + in, out := &in.TableNames, &out.TableNames + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OrchestrationExecutor. -func (in *OrchestrationExecutor) DeepCopy() *OrchestrationExecutor { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RedshiftQueryEngineAWSDataCatalogStorageConfiguration. +func (in *RedshiftQueryEngineAWSDataCatalogStorageConfiguration) DeepCopy() *RedshiftQueryEngineAWSDataCatalogStorageConfiguration { if in == nil { return nil } - out := new(OrchestrationExecutor) + out := new(RedshiftQueryEngineAWSDataCatalogStorageConfiguration) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ParameterDetail) DeepCopyInto(out *ParameterDetail) { +func (in *RedshiftQueryEngineConfiguration) DeepCopyInto(out *RedshiftQueryEngineConfiguration) { *out = *in - if in.Required != nil { - in, out := &in.Required, &out.Required - *out = new(bool) + if in.ProvisionedConfiguration != nil { + in, out := &in.ProvisionedConfiguration, &out.ProvisionedConfiguration + *out = new(RedshiftProvisionedConfiguration) + (*in).DeepCopyInto(*out) + } + if in.ServerlessConfiguration != nil { + in, out := &in.ServerlessConfiguration, &out.ServerlessConfiguration + *out = new(RedshiftServerlessConfiguration) + (*in).DeepCopyInto(*out) + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) **out = **in } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ParameterDetail. -func (in *ParameterDetail) DeepCopy() *ParameterDetail { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RedshiftQueryEngineConfiguration. +func (in *RedshiftQueryEngineConfiguration) DeepCopy() *RedshiftQueryEngineConfiguration { if in == nil { return nil } - out := new(ParameterDetail) + out := new(RedshiftQueryEngineConfiguration) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PromptConfiguration) DeepCopyInto(out *PromptConfiguration) { +func (in *RedshiftQueryEngineRedshiftStorageConfiguration) DeepCopyInto(out *RedshiftQueryEngineRedshiftStorageConfiguration) { *out = *in - if in.BasePromptTemplate != nil { - in, out := &in.BasePromptTemplate, &out.BasePromptTemplate + if in.DatabaseName != nil { + in, out := &in.DatabaseName, &out.DatabaseName *out = new(string) **out = **in } - if in.FoundationModel != nil { - in, out := &in.FoundationModel, &out.FoundationModel - *out = new(string) - **out = **in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RedshiftQueryEngineRedshiftStorageConfiguration. +func (in *RedshiftQueryEngineRedshiftStorageConfiguration) DeepCopy() *RedshiftQueryEngineRedshiftStorageConfiguration { + if in == nil { + return nil } - if in.InferenceConfiguration != nil { - in, out := &in.InferenceConfiguration, &out.InferenceConfiguration - *out = new(InferenceConfiguration) + out := new(RedshiftQueryEngineRedshiftStorageConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RedshiftQueryEngineStorageConfiguration) DeepCopyInto(out *RedshiftQueryEngineStorageConfiguration) { + *out = *in + if in.AWSDataCatalogConfiguration != nil { + in, out := &in.AWSDataCatalogConfiguration, &out.AWSDataCatalogConfiguration + *out = new(RedshiftQueryEngineAWSDataCatalogStorageConfiguration) (*in).DeepCopyInto(*out) } - if in.ParserMode != nil { - in, out := &in.ParserMode, &out.ParserMode - *out = new(string) - **out = **in + if in.RedshiftConfiguration != nil { + in, out := &in.RedshiftConfiguration, &out.RedshiftConfiguration + *out = new(RedshiftQueryEngineRedshiftStorageConfiguration) + (*in).DeepCopyInto(*out) } - if in.PromptCreationMode != nil { - in, out := &in.PromptCreationMode, &out.PromptCreationMode + if in.Type != nil { + in, out := &in.Type, &out.Type *out = new(string) **out = **in } - if in.PromptState != nil { - in, out := &in.PromptState, &out.PromptState +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RedshiftQueryEngineStorageConfiguration. +func (in *RedshiftQueryEngineStorageConfiguration) DeepCopy() *RedshiftQueryEngineStorageConfiguration { + if in == nil { + return nil + } + out := new(RedshiftQueryEngineStorageConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RedshiftServerlessAuthConfiguration) DeepCopyInto(out *RedshiftServerlessAuthConfiguration) { + *out = *in + if in.Type != nil { + in, out := &in.Type, &out.Type *out = new(string) **out = **in } - if in.PromptType != nil { - in, out := &in.PromptType, &out.PromptType + if in.UsernamePasswordSecretARN != nil { + in, out := &in.UsernamePasswordSecretARN, &out.UsernamePasswordSecretARN *out = new(string) **out = **in } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PromptConfiguration. -func (in *PromptConfiguration) DeepCopy() *PromptConfiguration { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RedshiftServerlessAuthConfiguration. +func (in *RedshiftServerlessAuthConfiguration) DeepCopy() *RedshiftServerlessAuthConfiguration { if in == nil { return nil } - out := new(PromptConfiguration) + out := new(RedshiftServerlessAuthConfiguration) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PromptFlowNodeConfiguration) DeepCopyInto(out *PromptFlowNodeConfiguration) { +func (in *RedshiftServerlessConfiguration) DeepCopyInto(out *RedshiftServerlessConfiguration) { *out = *in - if in.GuardrailConfiguration != nil { - in, out := &in.GuardrailConfiguration, &out.GuardrailConfiguration - *out = new(GuardrailConfiguration) + if in.AuthConfiguration != nil { + in, out := &in.AuthConfiguration, &out.AuthConfiguration + *out = new(RedshiftServerlessAuthConfiguration) (*in).DeepCopyInto(*out) } + if in.WorkgroupARN != nil { + in, out := &in.WorkgroupARN, &out.WorkgroupARN + *out = new(string) + **out = **in + } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PromptFlowNodeConfiguration. -func (in *PromptFlowNodeConfiguration) DeepCopy() *PromptFlowNodeConfiguration { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RedshiftServerlessConfiguration. +func (in *RedshiftServerlessConfiguration) DeepCopy() *RedshiftServerlessConfiguration { if in == nil { return nil } - out := new(PromptFlowNodeConfiguration) + out := new(RedshiftServerlessConfiguration) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PromptModelInferenceConfiguration) DeepCopyInto(out *PromptModelInferenceConfiguration) { +func (in *S3Content) DeepCopyInto(out *S3Content) { *out = *in - if in.MaxTokens != nil { - in, out := &in.MaxTokens, &out.MaxTokens - *out = new(int64) - **out = **in - } - if in.StopSequences != nil { - in, out := &in.StopSequences, &out.StopSequences - *out = make([]*string, len(*in)) - for i := range *in { - if (*in)[i] != nil { - in, out := &(*in)[i], &(*out)[i] - *out = new(string) - **out = **in - } - } - } - if in.Temperature != nil { - in, out := &in.Temperature, &out.Temperature - *out = new(float64) - **out = **in - } - if in.TopP != nil { - in, out := &in.TopP, &out.TopP - *out = new(float64) - **out = **in + if in.S3Location != nil { + in, out := &in.S3Location, &out.S3Location + *out = new(S3Location) + (*in).DeepCopyInto(*out) } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PromptModelInferenceConfiguration. -func (in *PromptModelInferenceConfiguration) DeepCopy() *PromptModelInferenceConfiguration { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new S3Content. +func (in *S3Content) DeepCopy() *S3Content { if in == nil { return nil } - out := new(PromptModelInferenceConfiguration) + out := new(S3Content) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PromptOverrideConfiguration) DeepCopyInto(out *PromptOverrideConfiguration) { +func (in *S3Location) DeepCopyInto(out *S3Location) { *out = *in - if in.OverrideLambda != nil { - in, out := &in.OverrideLambda, &out.OverrideLambda + if in.URI != nil { + in, out := &in.URI, &out.URI *out = new(string) **out = **in } - if in.PromptConfigurations != nil { - in, out := &in.PromptConfigurations, &out.PromptConfigurations - *out = make([]*PromptConfiguration, len(*in)) - for i := range *in { - if (*in)[i] != nil { - in, out := &(*in)[i], &(*out)[i] - *out = new(PromptConfiguration) - (*in).DeepCopyInto(*out) - } - } - } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PromptOverrideConfiguration. -func (in *PromptOverrideConfiguration) DeepCopy() *PromptOverrideConfiguration { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new S3Location. +func (in *S3Location) DeepCopy() *S3Location { if in == nil { return nil } - out := new(PromptOverrideConfiguration) + out := new(S3Location) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PromptSummary) DeepCopyInto(out *PromptSummary) { +func (in *SQLKnowledgeBaseConfiguration) DeepCopyInto(out *SQLKnowledgeBaseConfiguration) { *out = *in - if in.CreatedAt != nil { - in, out := &in.CreatedAt, &out.CreatedAt - *out = (*in).DeepCopy() - } - if in.UpdatedAt != nil { - in, out := &in.UpdatedAt, &out.UpdatedAt - *out = (*in).DeepCopy() + if in.RedshiftConfiguration != nil { + in, out := &in.RedshiftConfiguration, &out.RedshiftConfiguration + *out = new(RedshiftConfiguration) + (*in).DeepCopyInto(*out) } - if in.Version != nil { - in, out := &in.Version, &out.Version + if in.Type != nil { + in, out := &in.Type, &out.Type *out = new(string) **out = **in } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PromptSummary. -func (in *PromptSummary) DeepCopy() *PromptSummary { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SQLKnowledgeBaseConfiguration. +func (in *SQLKnowledgeBaseConfiguration) DeepCopy() *SQLKnowledgeBaseConfiguration { if in == nil { return nil } - out := new(PromptSummary) + out := new(SQLKnowledgeBaseConfiguration) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *RedshiftProvisionedAuthConfiguration) DeepCopyInto(out *RedshiftProvisionedAuthConfiguration) { +func (in *SalesforceSourceConfiguration) DeepCopyInto(out *SalesforceSourceConfiguration) { *out = *in - if in.DatabaseUser != nil { - in, out := &in.DatabaseUser, &out.DatabaseUser + if in.CredentialsSecretARN != nil { + in, out := &in.CredentialsSecretARN, &out.CredentialsSecretARN *out = new(string) **out = **in } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RedshiftProvisionedAuthConfiguration. -func (in *RedshiftProvisionedAuthConfiguration) DeepCopy() *RedshiftProvisionedAuthConfiguration { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SalesforceSourceConfiguration. +func (in *SalesforceSourceConfiguration) DeepCopy() *SalesforceSourceConfiguration { if in == nil { return nil } - out := new(RedshiftProvisionedAuthConfiguration) + out := new(SalesforceSourceConfiguration) in.DeepCopyInto(out) return out } @@ -1964,6 +3139,122 @@ func (in *SessionSummaryConfiguration) DeepCopy() *SessionSummaryConfiguration { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SharePointSourceConfiguration) DeepCopyInto(out *SharePointSourceConfiguration) { + *out = *in + if in.CredentialsSecretARN != nil { + in, out := &in.CredentialsSecretARN, &out.CredentialsSecretARN + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SharePointSourceConfiguration. +func (in *SharePointSourceConfiguration) DeepCopy() *SharePointSourceConfiguration { + if in == nil { + return nil + } + out := new(SharePointSourceConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *StorageConfiguration) DeepCopyInto(out *StorageConfiguration) { + *out = *in + if in.MongoDBAtlasConfiguration != nil { + in, out := &in.MongoDBAtlasConfiguration, &out.MongoDBAtlasConfiguration + *out = new(MongoDBAtlasConfiguration) + (*in).DeepCopyInto(*out) + } + if in.OpensearchServerlessConfiguration != nil { + in, out := &in.OpensearchServerlessConfiguration, &out.OpensearchServerlessConfiguration + *out = new(OpenSearchServerlessConfiguration) + (*in).DeepCopyInto(*out) + } + if in.PineconeConfiguration != nil { + in, out := &in.PineconeConfiguration, &out.PineconeConfiguration + *out = new(PineconeConfiguration) + (*in).DeepCopyInto(*out) + } + if in.RdsConfiguration != nil { + in, out := &in.RdsConfiguration, &out.RdsConfiguration + *out = new(RdsConfiguration) + (*in).DeepCopyInto(*out) + } + if in.RedisEnterpriseCloudConfiguration != nil { + in, out := &in.RedisEnterpriseCloudConfiguration, &out.RedisEnterpriseCloudConfiguration + *out = new(RedisEnterpriseCloudConfiguration) + (*in).DeepCopyInto(*out) + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StorageConfiguration. +func (in *StorageConfiguration) DeepCopy() *StorageConfiguration { + if in == nil { + return nil + } + out := new(StorageConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SupplementalDataStorageConfiguration) DeepCopyInto(out *SupplementalDataStorageConfiguration) { + *out = *in + if in.StorageLocations != nil { + in, out := &in.StorageLocations, &out.StorageLocations + *out = make([]*SupplementalDataStorageLocation, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(SupplementalDataStorageLocation) + (*in).DeepCopyInto(*out) + } + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SupplementalDataStorageConfiguration. +func (in *SupplementalDataStorageConfiguration) DeepCopy() *SupplementalDataStorageConfiguration { + if in == nil { + return nil + } + out := new(SupplementalDataStorageConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SupplementalDataStorageLocation) DeepCopyInto(out *SupplementalDataStorageLocation) { + *out = *in + if in.S3Location != nil { + in, out := &in.S3Location, &out.S3Location + *out = new(S3Location) + (*in).DeepCopyInto(*out) + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SupplementalDataStorageLocation. +func (in *SupplementalDataStorageLocation) DeepCopy() *SupplementalDataStorageLocation { + if in == nil { + return nil + } + out := new(SupplementalDataStorageLocation) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *TransformationLambdaConfiguration) DeepCopyInto(out *TransformationLambdaConfiguration) { *out = *in @@ -1983,3 +3274,33 @@ func (in *TransformationLambdaConfiguration) DeepCopy() *TransformationLambdaCon in.DeepCopyInto(out) return out } + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VectorKnowledgeBaseConfiguration) DeepCopyInto(out *VectorKnowledgeBaseConfiguration) { + *out = *in + if in.EmbeddingModelARN != nil { + in, out := &in.EmbeddingModelARN, &out.EmbeddingModelARN + *out = new(string) + **out = **in + } + if in.EmbeddingModelConfiguration != nil { + in, out := &in.EmbeddingModelConfiguration, &out.EmbeddingModelConfiguration + *out = new(EmbeddingModelConfiguration) + (*in).DeepCopyInto(*out) + } + if in.SupplementalDataStorageConfiguration != nil { + in, out := &in.SupplementalDataStorageConfiguration, &out.SupplementalDataStorageConfiguration + *out = new(SupplementalDataStorageConfiguration) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VectorKnowledgeBaseConfiguration. +func (in *VectorKnowledgeBaseConfiguration) DeepCopy() *VectorKnowledgeBaseConfiguration { + if in == nil { + return nil + } + out := new(VectorKnowledgeBaseConfiguration) + in.DeepCopyInto(out) + return out +} diff --git a/cmd/controller/main.go b/cmd/controller/main.go index 4905e1d..238bfb8 100644 --- a/cmd/controller/main.go +++ b/cmd/controller/main.go @@ -41,6 +41,7 @@ import ( svcresource "github.com/aws-controllers-k8s/bedrockagent-controller/pkg/resource" _ "github.com/aws-controllers-k8s/bedrockagent-controller/pkg/resource/agent" + _ "github.com/aws-controllers-k8s/bedrockagent-controller/pkg/resource/knowledge_base" "github.com/aws-controllers-k8s/bedrockagent-controller/pkg/version" ) diff --git a/config/crd/bases/bedrockagent.services.k8s.aws_knowledgebases.yaml b/config/crd/bases/bedrockagent.services.k8s.aws_knowledgebases.yaml new file mode 100644 index 0000000..659bbdd --- /dev/null +++ b/config/crd/bases/bedrockagent.services.k8s.aws_knowledgebases.yaml @@ -0,0 +1,530 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.16.2 + name: knowledgebases.bedrockagent.services.k8s.aws +spec: + group: bedrockagent.services.k8s.aws + names: + kind: KnowledgeBase + listKind: KnowledgeBaseList + plural: knowledgebases + singular: knowledgebase + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: KnowledgeBase is the Schema for the KnowledgeBases API + 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: |- + KnowledgeBaseSpec defines the desired state of KnowledgeBase. + + Contains information about a knowledge base. + properties: + description: + description: A description of the knowledge base. + type: string + knowledgeBaseConfiguration: + description: Contains details about the embeddings model used for + the knowledge base. + properties: + kendraKnowledgeBaseConfiguration: + description: Settings for an Amazon Kendra knowledge base. + properties: + kendraIndexARN: + type: string + type: object + sqlKnowledgeBaseConfiguration: + description: |- + Contains configurations for a knowledge base connected to an SQL database. + Specify the SQL database type in the type field and include the corresponding + field. For more information, see Build a knowledge base by connecting to + a structured data source (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-build-structured.html) + in the Amazon Bedrock User Guide. + properties: + redshiftConfiguration: + description: |- + Contains configurations for an Amazon Redshift database. For more information, + see Build a knowledge base by connecting to a structured data source (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-build-structured.html) + in the Amazon Bedrock User Guide. + properties: + queryEngineConfiguration: + description: |- + Contains configurations for an Amazon Redshift query engine. Specify the + type of query engine in type and include the corresponding field. For more + information, see Build a knowledge base by connecting to a structured data + source (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-build-structured.html) + in the Amazon Bedrock User Guide. + properties: + provisionedConfiguration: + description: Contains configurations for a provisioned + Amazon Redshift query engine. + properties: + authConfiguration: + description: |- + Contains configurations for authentication to an Amazon Redshift provisioned + data warehouse. Specify the type of authentication to use in the type field + and include the corresponding field. If you specify IAM authentication, you + don't need to include another field. + properties: + databaseUser: + type: string + type: + type: string + usernamePasswordSecretARN: + type: string + type: object + clusterIdentifier: + type: string + type: object + serverlessConfiguration: + description: Contains configurations for authentication + to Amazon Redshift Serverless. + properties: + authConfiguration: + description: |- + Specifies configurations for authentication to a Redshift Serverless. Specify + the type of authentication to use in the type field and include the corresponding + field. If you specify IAM authentication, you don't need to include another + field. + properties: + type: + type: string + usernamePasswordSecretARN: + type: string + type: object + workgroupARN: + type: string + type: object + type: + type: string + type: object + queryGenerationConfiguration: + description: |- + Contains configurations for query generation. For more information, see Build + a knowledge base by connecting to a structured data source (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-build-structured.html) + in the Amazon Bedrock User Guide.. + properties: + executionTimeoutSeconds: + format: int64 + type: integer + generationContext: + description: '>Contains configurations for context + to use during query generation.' + properties: + curatedQueries: + items: + description: |- + Contains configurations for a query, each of which defines information about + example queries to help the query engine generate appropriate SQL queries. + properties: + naturalLanguage: + type: string + sql: + type: string + type: object + type: array + tables: + items: + description: Contains information about a table + for the query engine to consider. + properties: + columns: + items: + description: |- + Contains information about a column in the current table for the query engine + to consider. + properties: + description: + type: string + inclusion: + type: string + name: + type: string + type: object + type: array + description: + type: string + inclusion: + type: string + name: + type: string + type: object + type: array + type: object + type: object + storageConfigurations: + items: + description: |- + Contains configurations for Amazon Redshift data storage. Specify the data + storage service to use in the type field and include the corresponding field. + For more information, see Build a knowledge base by connecting to a structured + data source (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-build-structured.html) + in the Amazon Bedrock User Guide. + properties: + awsDataCatalogConfiguration: + description: Contains configurations for storage + in Glue Data Catalog. + properties: + tableNames: + items: + type: string + type: array + type: object + redshiftConfiguration: + description: Contains configurations for storage + in Amazon Redshift. + properties: + databaseName: + type: string + type: object + type_: + type: string + type: object + type: array + type: object + type: + type: string + type: object + type: + type: string + vectorKnowledgeBaseConfiguration: + description: |- + Contains details about the model used to create vector embeddings for the + knowledge base. + properties: + embeddingModelARN: + type: string + embeddingModelConfiguration: + description: The configuration details for the embeddings + model. + properties: + bedrockEmbeddingModelConfiguration: + description: The vector configuration details for the + Bedrock embeddings model. + properties: + dimensions: + format: int64 + type: integer + embeddingDataType: + description: Bedrock models embedding data type. Can + be either float32 or binary. + type: string + type: object + type: object + supplementalDataStorageConfiguration: + description: |- + Specifies configurations for the storage location of the images extracted + from multimodal documents in your data source. These images can be retrieved + and returned to the end user. + properties: + storageLocations: + items: + description: |- + Contains information about a storage location for images extracted from multimodal + documents in your data source. + properties: + s3Location: + description: An Amazon S3 location. + properties: + uri: + type: string + type: object + type_: + type: string + type: object + type: array + type: object + type: object + type: object + name: + description: |- + A name for the knowledge base. + + Regex Pattern: `^([0-9a-zA-Z][_-]?){1,100}$` + type: string + roleARN: + description: |- + The Amazon Resource Name (ARN) of the IAM role with permissions to invoke + API operations on the knowledge base. + + Regex Pattern: `^arn:aws(-[^:]+)?:iam::([0-9]{12})?:role/.+$` + type: string + storageConfiguration: + description: |- + Contains details about the configuration of the vector database used for + the knowledge base. + properties: + mongoDBAtlasConfiguration: + description: |- + Contains details about the storage configuration of the knowledge base in + MongoDB Atlas. + properties: + collectionName: + type: string + credentialsSecretARN: + type: string + databaseName: + type: string + endpoint: + type: string + endpointServiceName: + type: string + fieldMapping: + description: |- + Contains the names of the fields to which to map information about the vector + store. + properties: + metadataField: + type: string + textField: + type: string + vectorField: + type: string + type: object + vectorIndexName: + type: string + type: object + opensearchServerlessConfiguration: + description: |- + Contains details about the storage configuration of the knowledge base in + Amazon OpenSearch Service. For more information, see Create a vector index + in Amazon OpenSearch Service (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-setup-oss.html). + properties: + collectionARN: + type: string + fieldMapping: + description: |- + Contains the names of the fields to which to map information about the vector + store. + properties: + metadataField: + type: string + textField: + type: string + vectorField: + type: string + type: object + vectorIndexName: + type: string + type: object + pineconeConfiguration: + description: |- + Contains details about the storage configuration of the knowledge base in + Pinecone. For more information, see Create a vector index in Pinecone (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-setup-pinecone.html). + properties: + connectionString: + type: string + credentialsSecretARN: + type: string + fieldMapping: + description: |- + Contains the names of the fields to which to map information about the vector + store. + properties: + metadataField: + type: string + textField: + type: string + type: object + namespace: + type: string + type: object + rdsConfiguration: + description: |- + Contains details about the storage configuration of the knowledge base in + Amazon RDS. For more information, see Create a vector index in Amazon RDS + (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-setup-rds.html). + properties: + credentialsSecretARN: + type: string + databaseName: + type: string + fieldMapping: + description: |- + Contains the names of the fields to which to map information about the vector + store. + properties: + metadataField: + type: string + primaryKeyField: + type: string + textField: + type: string + vectorField: + type: string + type: object + resourceARN: + type: string + tableName: + type: string + type: object + redisEnterpriseCloudConfiguration: + description: |- + Contains details about the storage configuration of the knowledge base in + Redis Enterprise Cloud. For more information, see Create a vector index in + Redis Enterprise Cloud (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-setup-oss.html). + properties: + credentialsSecretARN: + type: string + endpoint: + type: string + fieldMapping: + description: |- + Contains the names of the fields to which to map information about the vector + store. + properties: + metadataField: + type: string + textField: + type: string + vectorField: + type: string + type: object + vectorIndexName: + type: string + type: object + type: + type: string + type: object + tags: + additionalProperties: + type: string + description: |- + An object containing key-value pairs that define the tags to attach to the + resource. + type: object + required: + - knowledgeBaseConfiguration + - name + - roleARN + - storageConfiguration + type: object + status: + description: KnowledgeBaseStatus defines the observed state of KnowledgeBase + properties: + ackResourceMetadata: + description: |- + All CRs managed by ACK have a common `Status.ACKResourceMetadata` member + that is used to contain resource sync state, account ownership, + constructed ARN for the resource + properties: + arn: + description: |- + ARN is the Amazon Resource Name for the resource. This is a + globally-unique identifier and is set only by the ACK service controller + once the controller has orchestrated the creation of the resource OR + when it has verified that an "adopted" resource (a resource where the + ARN annotation was set by the Kubernetes user on the CR) exists and + matches the supplied CR's Spec field values. + https://github.com/aws/aws-controllers-k8s/issues/270 + type: string + ownerAccountID: + description: |- + OwnerAccountID is the AWS Account ID of the account that owns the + backend AWS service API resource. + type: string + region: + description: Region is the AWS region in which the resource exists + or will exist. + type: string + required: + - ownerAccountID + - region + type: object + conditions: + description: |- + All CRs managed by ACK have a common `Status.Conditions` member that + contains a collection of `ackv1alpha1.Condition` objects that describe + the various terminal states of the CR and its backend AWS service API + resource + items: + description: |- + Condition is the common struct used by all CRDs managed by ACK service + controllers to indicate terminal states of the CR and its backend AWS + service API resource + properties: + lastTransitionTime: + description: Last time the condition transitioned from one status + to another. + format: date-time + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type is the type of the Condition + type: string + required: + - status + - type + type: object + type: array + createdAt: + description: The time the knowledge base was created. + format: date-time + type: string + failureReasons: + description: A list of reasons that the API operation on the knowledge + base failed. + items: + type: string + type: array + knowledgeBaseID: + description: |- + The unique identifier of the knowledge base. + + Regex Pattern: `^[0-9a-zA-Z]{10}$` + type: string + status: + description: |- + The status of the knowledge base. The following statuses are possible: + + * CREATING – The knowledge base is being created. + + * ACTIVE – The knowledge base is ready to be queried. + + * DELETING – The knowledge base is being deleted. + + * UPDATING – The knowledge base is being updated. + + * FAILED – The knowledge base API operation failed. + type: string + updatedAt: + description: The time the knowledge base was last updated. + format: date-time + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} diff --git a/config/crd/kustomization.yaml b/config/crd/kustomization.yaml index f9450f3..0dd832c 100644 --- a/config/crd/kustomization.yaml +++ b/config/crd/kustomization.yaml @@ -3,3 +3,4 @@ kind: Kustomization resources: - common - bases/bedrockagent.services.k8s.aws_agents.yaml + - bases/bedrockagent.services.k8s.aws_knowledgebases.yaml diff --git a/config/rbac/cluster-role-controller.yaml b/config/rbac/cluster-role-controller.yaml index e97c37d..a176b4f 100644 --- a/config/rbac/cluster-role-controller.yaml +++ b/config/rbac/cluster-role-controller.yaml @@ -26,6 +26,7 @@ rules: - bedrockagent.services.k8s.aws resources: - agents + - knowledgebases verbs: - create - delete @@ -38,6 +39,7 @@ rules: - bedrockagent.services.k8s.aws resources: - agents/status + - knowledgebases/status verbs: - get - patch diff --git a/config/rbac/role-reader.yaml b/config/rbac/role-reader.yaml index a831708..4536157 100644 --- a/config/rbac/role-reader.yaml +++ b/config/rbac/role-reader.yaml @@ -10,6 +10,7 @@ rules: - bedrockagent.services.k8s.aws resources: - agents + - knowledgebases verbs: - get - list diff --git a/config/rbac/role-writer.yaml b/config/rbac/role-writer.yaml index d7adac0..30b9e0b 100644 --- a/config/rbac/role-writer.yaml +++ b/config/rbac/role-writer.yaml @@ -10,6 +10,7 @@ rules: - bedrockagent.services.k8s.aws resources: - agents + - knowledgebases verbs: - create - delete @@ -22,6 +23,7 @@ rules: - bedrockagent.services.k8s.aws resources: - agents + - knowledgebases verbs: - get - patch diff --git a/generator.yaml b/generator.yaml index 7519e2c..40d29af 100644 --- a/generator.yaml +++ b/generator.yaml @@ -9,13 +9,14 @@ ignore: - Flow - FlowAlias - FlowVersion - - KnowledgeBase + #- KnowledgeBase - Prompt - PromptVersion field_paths: # Uses unhandled type 'smithy.api#document' - "PromptOverrideConfiguration.PromptConfigurations.PromptConfiguration.AdditionalModelRequestFields" - CreateAgentInput.ClientToken + - CreateKnowledgeBaseInput.ClientToken resources: Agent: @@ -36,7 +37,7 @@ resources: from: operation: TagResource path: Tags - + synced: when: - path: Status.AgentStatus @@ -54,4 +55,40 @@ resources: sdk_update_pre_build_request: template_path: hooks/agent/sdk_update_pre_build_request.go.tpl - + KnowledgeBase: + synced: + when: + - path: Status.Status + in: + - ACTIVE + fields: + Name: + is_required: true + RoleArn: + is_required: true + KnowledgeBaseConfiguration: + is_required: true + KnowledgeBaseConfiguration.Type: + go_tag: json:"type,omitempty" + KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.Type: + go_tag: json:"type,omitempty" + KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.Type: + go_tag: json:"type,omitempty" + KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.Type: + go_tag: json:"type,omitempty" + KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.Type: + go_tag: json:"type,omitempty" +# KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.StorageConfigurations: +# type: "[]*RedshiftQueryEngineStorageConfiguration" +# go_tag: json:"type,omitempty" + StorageConfiguration.Type: + go_tag: json:"type,omitempty" + StorageConfiguration: + is_required: true + Tags: + from: + operation: TagResource + path: Tags + exceptions: + terminal_codes: + - ValidationException diff --git a/helm/crds/bedrockagent.services.k8s.aws_knowledgebases.yaml b/helm/crds/bedrockagent.services.k8s.aws_knowledgebases.yaml new file mode 100644 index 0000000..659bbdd --- /dev/null +++ b/helm/crds/bedrockagent.services.k8s.aws_knowledgebases.yaml @@ -0,0 +1,530 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.16.2 + name: knowledgebases.bedrockagent.services.k8s.aws +spec: + group: bedrockagent.services.k8s.aws + names: + kind: KnowledgeBase + listKind: KnowledgeBaseList + plural: knowledgebases + singular: knowledgebase + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: KnowledgeBase is the Schema for the KnowledgeBases API + 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: |- + KnowledgeBaseSpec defines the desired state of KnowledgeBase. + + Contains information about a knowledge base. + properties: + description: + description: A description of the knowledge base. + type: string + knowledgeBaseConfiguration: + description: Contains details about the embeddings model used for + the knowledge base. + properties: + kendraKnowledgeBaseConfiguration: + description: Settings for an Amazon Kendra knowledge base. + properties: + kendraIndexARN: + type: string + type: object + sqlKnowledgeBaseConfiguration: + description: |- + Contains configurations for a knowledge base connected to an SQL database. + Specify the SQL database type in the type field and include the corresponding + field. For more information, see Build a knowledge base by connecting to + a structured data source (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-build-structured.html) + in the Amazon Bedrock User Guide. + properties: + redshiftConfiguration: + description: |- + Contains configurations for an Amazon Redshift database. For more information, + see Build a knowledge base by connecting to a structured data source (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-build-structured.html) + in the Amazon Bedrock User Guide. + properties: + queryEngineConfiguration: + description: |- + Contains configurations for an Amazon Redshift query engine. Specify the + type of query engine in type and include the corresponding field. For more + information, see Build a knowledge base by connecting to a structured data + source (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-build-structured.html) + in the Amazon Bedrock User Guide. + properties: + provisionedConfiguration: + description: Contains configurations for a provisioned + Amazon Redshift query engine. + properties: + authConfiguration: + description: |- + Contains configurations for authentication to an Amazon Redshift provisioned + data warehouse. Specify the type of authentication to use in the type field + and include the corresponding field. If you specify IAM authentication, you + don't need to include another field. + properties: + databaseUser: + type: string + type: + type: string + usernamePasswordSecretARN: + type: string + type: object + clusterIdentifier: + type: string + type: object + serverlessConfiguration: + description: Contains configurations for authentication + to Amazon Redshift Serverless. + properties: + authConfiguration: + description: |- + Specifies configurations for authentication to a Redshift Serverless. Specify + the type of authentication to use in the type field and include the corresponding + field. If you specify IAM authentication, you don't need to include another + field. + properties: + type: + type: string + usernamePasswordSecretARN: + type: string + type: object + workgroupARN: + type: string + type: object + type: + type: string + type: object + queryGenerationConfiguration: + description: |- + Contains configurations for query generation. For more information, see Build + a knowledge base by connecting to a structured data source (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-build-structured.html) + in the Amazon Bedrock User Guide.. + properties: + executionTimeoutSeconds: + format: int64 + type: integer + generationContext: + description: '>Contains configurations for context + to use during query generation.' + properties: + curatedQueries: + items: + description: |- + Contains configurations for a query, each of which defines information about + example queries to help the query engine generate appropriate SQL queries. + properties: + naturalLanguage: + type: string + sql: + type: string + type: object + type: array + tables: + items: + description: Contains information about a table + for the query engine to consider. + properties: + columns: + items: + description: |- + Contains information about a column in the current table for the query engine + to consider. + properties: + description: + type: string + inclusion: + type: string + name: + type: string + type: object + type: array + description: + type: string + inclusion: + type: string + name: + type: string + type: object + type: array + type: object + type: object + storageConfigurations: + items: + description: |- + Contains configurations for Amazon Redshift data storage. Specify the data + storage service to use in the type field and include the corresponding field. + For more information, see Build a knowledge base by connecting to a structured + data source (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-build-structured.html) + in the Amazon Bedrock User Guide. + properties: + awsDataCatalogConfiguration: + description: Contains configurations for storage + in Glue Data Catalog. + properties: + tableNames: + items: + type: string + type: array + type: object + redshiftConfiguration: + description: Contains configurations for storage + in Amazon Redshift. + properties: + databaseName: + type: string + type: object + type_: + type: string + type: object + type: array + type: object + type: + type: string + type: object + type: + type: string + vectorKnowledgeBaseConfiguration: + description: |- + Contains details about the model used to create vector embeddings for the + knowledge base. + properties: + embeddingModelARN: + type: string + embeddingModelConfiguration: + description: The configuration details for the embeddings + model. + properties: + bedrockEmbeddingModelConfiguration: + description: The vector configuration details for the + Bedrock embeddings model. + properties: + dimensions: + format: int64 + type: integer + embeddingDataType: + description: Bedrock models embedding data type. Can + be either float32 or binary. + type: string + type: object + type: object + supplementalDataStorageConfiguration: + description: |- + Specifies configurations for the storage location of the images extracted + from multimodal documents in your data source. These images can be retrieved + and returned to the end user. + properties: + storageLocations: + items: + description: |- + Contains information about a storage location for images extracted from multimodal + documents in your data source. + properties: + s3Location: + description: An Amazon S3 location. + properties: + uri: + type: string + type: object + type_: + type: string + type: object + type: array + type: object + type: object + type: object + name: + description: |- + A name for the knowledge base. + + Regex Pattern: `^([0-9a-zA-Z][_-]?){1,100}$` + type: string + roleARN: + description: |- + The Amazon Resource Name (ARN) of the IAM role with permissions to invoke + API operations on the knowledge base. + + Regex Pattern: `^arn:aws(-[^:]+)?:iam::([0-9]{12})?:role/.+$` + type: string + storageConfiguration: + description: |- + Contains details about the configuration of the vector database used for + the knowledge base. + properties: + mongoDBAtlasConfiguration: + description: |- + Contains details about the storage configuration of the knowledge base in + MongoDB Atlas. + properties: + collectionName: + type: string + credentialsSecretARN: + type: string + databaseName: + type: string + endpoint: + type: string + endpointServiceName: + type: string + fieldMapping: + description: |- + Contains the names of the fields to which to map information about the vector + store. + properties: + metadataField: + type: string + textField: + type: string + vectorField: + type: string + type: object + vectorIndexName: + type: string + type: object + opensearchServerlessConfiguration: + description: |- + Contains details about the storage configuration of the knowledge base in + Amazon OpenSearch Service. For more information, see Create a vector index + in Amazon OpenSearch Service (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-setup-oss.html). + properties: + collectionARN: + type: string + fieldMapping: + description: |- + Contains the names of the fields to which to map information about the vector + store. + properties: + metadataField: + type: string + textField: + type: string + vectorField: + type: string + type: object + vectorIndexName: + type: string + type: object + pineconeConfiguration: + description: |- + Contains details about the storage configuration of the knowledge base in + Pinecone. For more information, see Create a vector index in Pinecone (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-setup-pinecone.html). + properties: + connectionString: + type: string + credentialsSecretARN: + type: string + fieldMapping: + description: |- + Contains the names of the fields to which to map information about the vector + store. + properties: + metadataField: + type: string + textField: + type: string + type: object + namespace: + type: string + type: object + rdsConfiguration: + description: |- + Contains details about the storage configuration of the knowledge base in + Amazon RDS. For more information, see Create a vector index in Amazon RDS + (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-setup-rds.html). + properties: + credentialsSecretARN: + type: string + databaseName: + type: string + fieldMapping: + description: |- + Contains the names of the fields to which to map information about the vector + store. + properties: + metadataField: + type: string + primaryKeyField: + type: string + textField: + type: string + vectorField: + type: string + type: object + resourceARN: + type: string + tableName: + type: string + type: object + redisEnterpriseCloudConfiguration: + description: |- + Contains details about the storage configuration of the knowledge base in + Redis Enterprise Cloud. For more information, see Create a vector index in + Redis Enterprise Cloud (https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-setup-oss.html). + properties: + credentialsSecretARN: + type: string + endpoint: + type: string + fieldMapping: + description: |- + Contains the names of the fields to which to map information about the vector + store. + properties: + metadataField: + type: string + textField: + type: string + vectorField: + type: string + type: object + vectorIndexName: + type: string + type: object + type: + type: string + type: object + tags: + additionalProperties: + type: string + description: |- + An object containing key-value pairs that define the tags to attach to the + resource. + type: object + required: + - knowledgeBaseConfiguration + - name + - roleARN + - storageConfiguration + type: object + status: + description: KnowledgeBaseStatus defines the observed state of KnowledgeBase + properties: + ackResourceMetadata: + description: |- + All CRs managed by ACK have a common `Status.ACKResourceMetadata` member + that is used to contain resource sync state, account ownership, + constructed ARN for the resource + properties: + arn: + description: |- + ARN is the Amazon Resource Name for the resource. This is a + globally-unique identifier and is set only by the ACK service controller + once the controller has orchestrated the creation of the resource OR + when it has verified that an "adopted" resource (a resource where the + ARN annotation was set by the Kubernetes user on the CR) exists and + matches the supplied CR's Spec field values. + https://github.com/aws/aws-controllers-k8s/issues/270 + type: string + ownerAccountID: + description: |- + OwnerAccountID is the AWS Account ID of the account that owns the + backend AWS service API resource. + type: string + region: + description: Region is the AWS region in which the resource exists + or will exist. + type: string + required: + - ownerAccountID + - region + type: object + conditions: + description: |- + All CRs managed by ACK have a common `Status.Conditions` member that + contains a collection of `ackv1alpha1.Condition` objects that describe + the various terminal states of the CR and its backend AWS service API + resource + items: + description: |- + Condition is the common struct used by all CRDs managed by ACK service + controllers to indicate terminal states of the CR and its backend AWS + service API resource + properties: + lastTransitionTime: + description: Last time the condition transitioned from one status + to another. + format: date-time + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type is the type of the Condition + type: string + required: + - status + - type + type: object + type: array + createdAt: + description: The time the knowledge base was created. + format: date-time + type: string + failureReasons: + description: A list of reasons that the API operation on the knowledge + base failed. + items: + type: string + type: array + knowledgeBaseID: + description: |- + The unique identifier of the knowledge base. + + Regex Pattern: `^[0-9a-zA-Z]{10}$` + type: string + status: + description: |- + The status of the knowledge base. The following statuses are possible: + + * CREATING – The knowledge base is being created. + + * ACTIVE – The knowledge base is ready to be queried. + + * DELETING – The knowledge base is being deleted. + + * UPDATING – The knowledge base is being updated. + + * FAILED – The knowledge base API operation failed. + type: string + updatedAt: + description: The time the knowledge base was last updated. + format: date-time + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} diff --git a/helm/templates/_helpers.tpl b/helm/templates/_helpers.tpl index 563a9fc..1511180 100644 --- a/helm/templates/_helpers.tpl +++ b/helm/templates/_helpers.tpl @@ -73,6 +73,7 @@ rules: - bedrockagent.services.k8s.aws resources: - agents + - knowledgebases verbs: - create - delete @@ -85,6 +86,7 @@ rules: - bedrockagent.services.k8s.aws resources: - agents/status + - knowledgebases/status verbs: - get - patch diff --git a/helm/templates/role-reader.yaml b/helm/templates/role-reader.yaml index 21d0a56..62bbc0e 100644 --- a/helm/templates/role-reader.yaml +++ b/helm/templates/role-reader.yaml @@ -17,6 +17,7 @@ rules: - bedrockagent.services.k8s.aws resources: - agents + - knowledgebases verbs: - get - list diff --git a/helm/templates/role-writer.yaml b/helm/templates/role-writer.yaml index 7c536a6..f89bb48 100644 --- a/helm/templates/role-writer.yaml +++ b/helm/templates/role-writer.yaml @@ -17,6 +17,7 @@ rules: - bedrockagent.services.k8s.aws resources: - agents + - knowledgebases verbs: - create - delete @@ -29,6 +30,7 @@ rules: - bedrockagent.services.k8s.aws resources: - agents + - knowledgebases verbs: - get - patch diff --git a/helm/values.yaml b/helm/values.yaml index 2ec3ad3..c5f844c 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -146,6 +146,7 @@ reconcile: # If specified, only the listed resource kinds will be reconciled. resources: - Agent + - KnowledgeBase serviceAccount: # Specifies whether a service account should be created diff --git a/pkg/resource/knowledge_base/delta.go b/pkg/resource/knowledge_base/delta.go new file mode 100644 index 0000000..710d05a --- /dev/null +++ b/pkg/resource/knowledge_base/delta.go @@ -0,0 +1,549 @@ +// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"). You may +// not use this file except in compliance with the License. A copy of the +// License is located at +// +// http://aws.amazon.com/apache2.0/ +// +// or in the "license" file accompanying this file. This file is distributed +// on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +// express or implied. See the License for the specific language governing +// permissions and limitations under the License. + +// Code generated by ack-generate. DO NOT EDIT. + +package knowledge_base + +import ( + "bytes" + "reflect" + + ackcompare "github.com/aws-controllers-k8s/runtime/pkg/compare" + acktags "github.com/aws-controllers-k8s/runtime/pkg/tags" +) + +// Hack to avoid import errors during build... +var ( + _ = &bytes.Buffer{} + _ = &reflect.Method{} + _ = &acktags.Tags{} +) + +// newResourceDelta returns a new `ackcompare.Delta` used to compare two +// resources +func newResourceDelta( + a *resource, + b *resource, +) *ackcompare.Delta { + delta := ackcompare.NewDelta() + if (a == nil && b != nil) || + (a != nil && b == nil) { + delta.Add("", a, b) + return delta + } + + if ackcompare.HasNilDifference(a.ko.Spec.Description, b.ko.Spec.Description) { + delta.Add("Spec.Description", a.ko.Spec.Description, b.ko.Spec.Description) + } else if a.ko.Spec.Description != nil && b.ko.Spec.Description != nil { + if *a.ko.Spec.Description != *b.ko.Spec.Description { + delta.Add("Spec.Description", a.ko.Spec.Description, b.ko.Spec.Description) + } + } + if ackcompare.HasNilDifference(a.ko.Spec.KnowledgeBaseConfiguration, b.ko.Spec.KnowledgeBaseConfiguration) { + delta.Add("Spec.KnowledgeBaseConfiguration", a.ko.Spec.KnowledgeBaseConfiguration, b.ko.Spec.KnowledgeBaseConfiguration) + } else if a.ko.Spec.KnowledgeBaseConfiguration != nil && b.ko.Spec.KnowledgeBaseConfiguration != nil { + if ackcompare.HasNilDifference(a.ko.Spec.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration, b.ko.Spec.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration) { + delta.Add("Spec.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration", a.ko.Spec.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration, b.ko.Spec.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration) + } else if a.ko.Spec.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration != nil && b.ko.Spec.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration != nil { + if ackcompare.HasNilDifference(a.ko.Spec.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration.KendraIndexARN, b.ko.Spec.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration.KendraIndexARN) { + delta.Add("Spec.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration.KendraIndexARN", a.ko.Spec.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration.KendraIndexARN, b.ko.Spec.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration.KendraIndexARN) + } else if a.ko.Spec.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration.KendraIndexARN != nil && b.ko.Spec.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration.KendraIndexARN != nil { + if *a.ko.Spec.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration.KendraIndexARN != *b.ko.Spec.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration.KendraIndexARN { + delta.Add("Spec.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration.KendraIndexARN", a.ko.Spec.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration.KendraIndexARN, b.ko.Spec.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration.KendraIndexARN) + } + } + } + if ackcompare.HasNilDifference(a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration) { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration) + } else if a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration != nil && b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration != nil { + if ackcompare.HasNilDifference(a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration) { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration) + } else if a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration != nil && b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration != nil { + if ackcompare.HasNilDifference(a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration) { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration) + } else if a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration != nil && b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration != nil { + if ackcompare.HasNilDifference(a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration) { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration) + } else if a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration != nil && b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration != nil { + if ackcompare.HasNilDifference(a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration) { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration) + } else if a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration != nil && b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration != nil { + if ackcompare.HasNilDifference(a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.DatabaseUser, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.DatabaseUser) { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.DatabaseUser", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.DatabaseUser, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.DatabaseUser) + } else if a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.DatabaseUser != nil && b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.DatabaseUser != nil { + if *a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.DatabaseUser != *b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.DatabaseUser { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.DatabaseUser", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.DatabaseUser, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.DatabaseUser) + } + } + if ackcompare.HasNilDifference(a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.Type, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.Type) { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.Type", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.Type, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.Type) + } else if a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.Type != nil && b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.Type != nil { + if *a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.Type != *b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.Type { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.Type", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.Type, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.Type) + } + } + if ackcompare.HasNilDifference(a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.UsernamePasswordSecretARN, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.UsernamePasswordSecretARN) { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.UsernamePasswordSecretARN", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.UsernamePasswordSecretARN, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.UsernamePasswordSecretARN) + } else if a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.UsernamePasswordSecretARN != nil && b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.UsernamePasswordSecretARN != nil { + if *a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.UsernamePasswordSecretARN != *b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.UsernamePasswordSecretARN { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.UsernamePasswordSecretARN", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.UsernamePasswordSecretARN, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.UsernamePasswordSecretARN) + } + } + } + if ackcompare.HasNilDifference(a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.ClusterIdentifier, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.ClusterIdentifier) { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.ClusterIdentifier", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.ClusterIdentifier, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.ClusterIdentifier) + } else if a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.ClusterIdentifier != nil && b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.ClusterIdentifier != nil { + if *a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.ClusterIdentifier != *b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.ClusterIdentifier { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.ClusterIdentifier", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.ClusterIdentifier, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.ClusterIdentifier) + } + } + } + if ackcompare.HasNilDifference(a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration) { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration) + } else if a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration != nil && b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration != nil { + if ackcompare.HasNilDifference(a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration) { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration) + } else if a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration != nil && b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration != nil { + if ackcompare.HasNilDifference(a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.Type, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.Type) { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.Type", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.Type, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.Type) + } else if a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.Type != nil && b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.Type != nil { + if *a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.Type != *b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.Type { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.Type", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.Type, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.Type) + } + } + if ackcompare.HasNilDifference(a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.UsernamePasswordSecretARN, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.UsernamePasswordSecretARN) { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.UsernamePasswordSecretARN", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.UsernamePasswordSecretARN, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.UsernamePasswordSecretARN) + } else if a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.UsernamePasswordSecretARN != nil && b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.UsernamePasswordSecretARN != nil { + if *a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.UsernamePasswordSecretARN != *b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.UsernamePasswordSecretARN { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.UsernamePasswordSecretARN", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.UsernamePasswordSecretARN, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.UsernamePasswordSecretARN) + } + } + } + if ackcompare.HasNilDifference(a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.WorkgroupARN, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.WorkgroupARN) { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.WorkgroupARN", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.WorkgroupARN, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.WorkgroupARN) + } else if a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.WorkgroupARN != nil && b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.WorkgroupARN != nil { + if *a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.WorkgroupARN != *b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.WorkgroupARN { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.WorkgroupARN", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.WorkgroupARN, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.WorkgroupARN) + } + } + } + if ackcompare.HasNilDifference(a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.Type, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.Type) { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.Type", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.Type, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.Type) + } else if a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.Type != nil && b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.Type != nil { + if *a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.Type != *b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.Type { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.Type", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.Type, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.Type) + } + } + } + if ackcompare.HasNilDifference(a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration) { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration) + } else if a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration != nil && b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration != nil { + if ackcompare.HasNilDifference(a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.ExecutionTimeoutSeconds, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.ExecutionTimeoutSeconds) { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.ExecutionTimeoutSeconds", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.ExecutionTimeoutSeconds, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.ExecutionTimeoutSeconds) + } else if a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.ExecutionTimeoutSeconds != nil && b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.ExecutionTimeoutSeconds != nil { + if *a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.ExecutionTimeoutSeconds != *b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.ExecutionTimeoutSeconds { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.ExecutionTimeoutSeconds", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.ExecutionTimeoutSeconds, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.ExecutionTimeoutSeconds) + } + } + if ackcompare.HasNilDifference(a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext) { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext) + } else if a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext != nil && b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext != nil { + if len(a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.CuratedQueries) != len(b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.CuratedQueries) { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.CuratedQueries", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.CuratedQueries, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.CuratedQueries) + } else if len(a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.CuratedQueries) > 0 { + if !reflect.DeepEqual(a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.CuratedQueries, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.CuratedQueries) { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.CuratedQueries", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.CuratedQueries, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.CuratedQueries) + } + } + if len(a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.Tables) != len(b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.Tables) { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.Tables", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.Tables, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.Tables) + } else if len(a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.Tables) > 0 { + if !reflect.DeepEqual(a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.Tables, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.Tables) { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.Tables", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.Tables, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.Tables) + } + } + } + } + if len(a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.StorageConfigurations) != len(b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.StorageConfigurations) { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.StorageConfigurations", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.StorageConfigurations, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.StorageConfigurations) + } else if len(a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.StorageConfigurations) > 0 { + if !reflect.DeepEqual(a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.StorageConfigurations, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.StorageConfigurations) { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.StorageConfigurations", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.StorageConfigurations, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.StorageConfigurations) + } + } + } + if ackcompare.HasNilDifference(a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.Type, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.Type) { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.Type", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.Type, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.Type) + } else if a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.Type != nil && b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.Type != nil { + if *a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.Type != *b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.Type { + delta.Add("Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.Type", a.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.Type, b.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.Type) + } + } + } + if ackcompare.HasNilDifference(a.ko.Spec.KnowledgeBaseConfiguration.Type, b.ko.Spec.KnowledgeBaseConfiguration.Type) { + delta.Add("Spec.KnowledgeBaseConfiguration.Type", a.ko.Spec.KnowledgeBaseConfiguration.Type, b.ko.Spec.KnowledgeBaseConfiguration.Type) + } else if a.ko.Spec.KnowledgeBaseConfiguration.Type != nil && b.ko.Spec.KnowledgeBaseConfiguration.Type != nil { + if *a.ko.Spec.KnowledgeBaseConfiguration.Type != *b.ko.Spec.KnowledgeBaseConfiguration.Type { + delta.Add("Spec.KnowledgeBaseConfiguration.Type", a.ko.Spec.KnowledgeBaseConfiguration.Type, b.ko.Spec.KnowledgeBaseConfiguration.Type) + } + } + if ackcompare.HasNilDifference(a.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration, b.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration) { + delta.Add("Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration", a.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration, b.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration) + } else if a.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration != nil && b.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration != nil { + if ackcompare.HasNilDifference(a.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelARN, b.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelARN) { + delta.Add("Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelARN", a.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelARN, b.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelARN) + } else if a.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelARN != nil && b.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelARN != nil { + if *a.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelARN != *b.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelARN { + delta.Add("Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelARN", a.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelARN, b.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelARN) + } + } + if ackcompare.HasNilDifference(a.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration, b.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration) { + delta.Add("Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration", a.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration, b.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration) + } else if a.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration != nil && b.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration != nil { + if ackcompare.HasNilDifference(a.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration, b.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration) { + delta.Add("Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration", a.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration, b.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration) + } else if a.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration != nil && b.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration != nil { + if ackcompare.HasNilDifference(a.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.Dimensions, b.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.Dimensions) { + delta.Add("Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.Dimensions", a.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.Dimensions, b.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.Dimensions) + } else if a.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.Dimensions != nil && b.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.Dimensions != nil { + if *a.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.Dimensions != *b.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.Dimensions { + delta.Add("Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.Dimensions", a.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.Dimensions, b.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.Dimensions) + } + } + if ackcompare.HasNilDifference(a.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.EmbeddingDataType, b.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.EmbeddingDataType) { + delta.Add("Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.EmbeddingDataType", a.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.EmbeddingDataType, b.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.EmbeddingDataType) + } else if a.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.EmbeddingDataType != nil && b.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.EmbeddingDataType != nil { + if *a.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.EmbeddingDataType != *b.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.EmbeddingDataType { + delta.Add("Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.EmbeddingDataType", a.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.EmbeddingDataType, b.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.EmbeddingDataType) + } + } + } + } + if ackcompare.HasNilDifference(a.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.SupplementalDataStorageConfiguration, b.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.SupplementalDataStorageConfiguration) { + delta.Add("Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.SupplementalDataStorageConfiguration", a.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.SupplementalDataStorageConfiguration, b.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.SupplementalDataStorageConfiguration) + } else if a.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.SupplementalDataStorageConfiguration != nil && b.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.SupplementalDataStorageConfiguration != nil { + if len(a.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.SupplementalDataStorageConfiguration.StorageLocations) != len(b.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.SupplementalDataStorageConfiguration.StorageLocations) { + delta.Add("Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.SupplementalDataStorageConfiguration.StorageLocations", a.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.SupplementalDataStorageConfiguration.StorageLocations, b.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.SupplementalDataStorageConfiguration.StorageLocations) + } else if len(a.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.SupplementalDataStorageConfiguration.StorageLocations) > 0 { + if !reflect.DeepEqual(a.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.SupplementalDataStorageConfiguration.StorageLocations, b.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.SupplementalDataStorageConfiguration.StorageLocations) { + delta.Add("Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.SupplementalDataStorageConfiguration.StorageLocations", a.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.SupplementalDataStorageConfiguration.StorageLocations, b.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.SupplementalDataStorageConfiguration.StorageLocations) + } + } + } + } + } + if ackcompare.HasNilDifference(a.ko.Spec.Name, b.ko.Spec.Name) { + delta.Add("Spec.Name", a.ko.Spec.Name, b.ko.Spec.Name) + } else if a.ko.Spec.Name != nil && b.ko.Spec.Name != nil { + if *a.ko.Spec.Name != *b.ko.Spec.Name { + delta.Add("Spec.Name", a.ko.Spec.Name, b.ko.Spec.Name) + } + } + if ackcompare.HasNilDifference(a.ko.Spec.RoleARN, b.ko.Spec.RoleARN) { + delta.Add("Spec.RoleARN", a.ko.Spec.RoleARN, b.ko.Spec.RoleARN) + } else if a.ko.Spec.RoleARN != nil && b.ko.Spec.RoleARN != nil { + if *a.ko.Spec.RoleARN != *b.ko.Spec.RoleARN { + delta.Add("Spec.RoleARN", a.ko.Spec.RoleARN, b.ko.Spec.RoleARN) + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration, b.ko.Spec.StorageConfiguration) { + delta.Add("Spec.StorageConfiguration", a.ko.Spec.StorageConfiguration, b.ko.Spec.StorageConfiguration) + } else if a.ko.Spec.StorageConfiguration != nil && b.ko.Spec.StorageConfiguration != nil { + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration, b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration) { + delta.Add("Spec.StorageConfiguration.MongoDBAtlasConfiguration", a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration, b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration) + } else if a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration != nil && b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration != nil { + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.CollectionName, b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.CollectionName) { + delta.Add("Spec.StorageConfiguration.MongoDBAtlasConfiguration.CollectionName", a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.CollectionName, b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.CollectionName) + } else if a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.CollectionName != nil && b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.CollectionName != nil { + if *a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.CollectionName != *b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.CollectionName { + delta.Add("Spec.StorageConfiguration.MongoDBAtlasConfiguration.CollectionName", a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.CollectionName, b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.CollectionName) + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.CredentialsSecretARN, b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.CredentialsSecretARN) { + delta.Add("Spec.StorageConfiguration.MongoDBAtlasConfiguration.CredentialsSecretARN", a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.CredentialsSecretARN, b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.CredentialsSecretARN) + } else if a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.CredentialsSecretARN != nil && b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.CredentialsSecretARN != nil { + if *a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.CredentialsSecretARN != *b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.CredentialsSecretARN { + delta.Add("Spec.StorageConfiguration.MongoDBAtlasConfiguration.CredentialsSecretARN", a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.CredentialsSecretARN, b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.CredentialsSecretARN) + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.DatabaseName, b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.DatabaseName) { + delta.Add("Spec.StorageConfiguration.MongoDBAtlasConfiguration.DatabaseName", a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.DatabaseName, b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.DatabaseName) + } else if a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.DatabaseName != nil && b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.DatabaseName != nil { + if *a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.DatabaseName != *b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.DatabaseName { + delta.Add("Spec.StorageConfiguration.MongoDBAtlasConfiguration.DatabaseName", a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.DatabaseName, b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.DatabaseName) + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.Endpoint, b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.Endpoint) { + delta.Add("Spec.StorageConfiguration.MongoDBAtlasConfiguration.Endpoint", a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.Endpoint, b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.Endpoint) + } else if a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.Endpoint != nil && b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.Endpoint != nil { + if *a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.Endpoint != *b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.Endpoint { + delta.Add("Spec.StorageConfiguration.MongoDBAtlasConfiguration.Endpoint", a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.Endpoint, b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.Endpoint) + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.EndpointServiceName, b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.EndpointServiceName) { + delta.Add("Spec.StorageConfiguration.MongoDBAtlasConfiguration.EndpointServiceName", a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.EndpointServiceName, b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.EndpointServiceName) + } else if a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.EndpointServiceName != nil && b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.EndpointServiceName != nil { + if *a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.EndpointServiceName != *b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.EndpointServiceName { + delta.Add("Spec.StorageConfiguration.MongoDBAtlasConfiguration.EndpointServiceName", a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.EndpointServiceName, b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.EndpointServiceName) + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping, b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping) { + delta.Add("Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping", a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping, b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping) + } else if a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping != nil && b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping != nil { + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.MetadataField, b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.MetadataField) { + delta.Add("Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.MetadataField", a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.MetadataField, b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.MetadataField) + } else if a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.MetadataField != nil && b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.MetadataField != nil { + if *a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.MetadataField != *b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.MetadataField { + delta.Add("Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.MetadataField", a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.MetadataField, b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.MetadataField) + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.TextField, b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.TextField) { + delta.Add("Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.TextField", a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.TextField, b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.TextField) + } else if a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.TextField != nil && b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.TextField != nil { + if *a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.TextField != *b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.TextField { + delta.Add("Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.TextField", a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.TextField, b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.TextField) + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.VectorField, b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.VectorField) { + delta.Add("Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.VectorField", a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.VectorField, b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.VectorField) + } else if a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.VectorField != nil && b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.VectorField != nil { + if *a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.VectorField != *b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.VectorField { + delta.Add("Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.VectorField", a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.VectorField, b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.VectorField) + } + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.VectorIndexName, b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.VectorIndexName) { + delta.Add("Spec.StorageConfiguration.MongoDBAtlasConfiguration.VectorIndexName", a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.VectorIndexName, b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.VectorIndexName) + } else if a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.VectorIndexName != nil && b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.VectorIndexName != nil { + if *a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.VectorIndexName != *b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.VectorIndexName { + delta.Add("Spec.StorageConfiguration.MongoDBAtlasConfiguration.VectorIndexName", a.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.VectorIndexName, b.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.VectorIndexName) + } + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration, b.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration) { + delta.Add("Spec.StorageConfiguration.OpensearchServerlessConfiguration", a.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration, b.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration) + } else if a.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration != nil && b.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration != nil { + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.CollectionARN, b.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.CollectionARN) { + delta.Add("Spec.StorageConfiguration.OpensearchServerlessConfiguration.CollectionARN", a.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.CollectionARN, b.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.CollectionARN) + } else if a.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.CollectionARN != nil && b.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.CollectionARN != nil { + if *a.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.CollectionARN != *b.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.CollectionARN { + delta.Add("Spec.StorageConfiguration.OpensearchServerlessConfiguration.CollectionARN", a.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.CollectionARN, b.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.CollectionARN) + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping, b.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping) { + delta.Add("Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping", a.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping, b.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping) + } else if a.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping != nil && b.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping != nil { + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.MetadataField, b.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.MetadataField) { + delta.Add("Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.MetadataField", a.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.MetadataField, b.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.MetadataField) + } else if a.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.MetadataField != nil && b.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.MetadataField != nil { + if *a.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.MetadataField != *b.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.MetadataField { + delta.Add("Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.MetadataField", a.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.MetadataField, b.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.MetadataField) + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.TextField, b.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.TextField) { + delta.Add("Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.TextField", a.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.TextField, b.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.TextField) + } else if a.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.TextField != nil && b.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.TextField != nil { + if *a.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.TextField != *b.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.TextField { + delta.Add("Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.TextField", a.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.TextField, b.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.TextField) + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.VectorField, b.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.VectorField) { + delta.Add("Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.VectorField", a.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.VectorField, b.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.VectorField) + } else if a.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.VectorField != nil && b.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.VectorField != nil { + if *a.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.VectorField != *b.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.VectorField { + delta.Add("Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.VectorField", a.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.VectorField, b.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.VectorField) + } + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.VectorIndexName, b.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.VectorIndexName) { + delta.Add("Spec.StorageConfiguration.OpensearchServerlessConfiguration.VectorIndexName", a.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.VectorIndexName, b.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.VectorIndexName) + } else if a.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.VectorIndexName != nil && b.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.VectorIndexName != nil { + if *a.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.VectorIndexName != *b.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.VectorIndexName { + delta.Add("Spec.StorageConfiguration.OpensearchServerlessConfiguration.VectorIndexName", a.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.VectorIndexName, b.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.VectorIndexName) + } + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.PineconeConfiguration, b.ko.Spec.StorageConfiguration.PineconeConfiguration) { + delta.Add("Spec.StorageConfiguration.PineconeConfiguration", a.ko.Spec.StorageConfiguration.PineconeConfiguration, b.ko.Spec.StorageConfiguration.PineconeConfiguration) + } else if a.ko.Spec.StorageConfiguration.PineconeConfiguration != nil && b.ko.Spec.StorageConfiguration.PineconeConfiguration != nil { + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.PineconeConfiguration.ConnectionString, b.ko.Spec.StorageConfiguration.PineconeConfiguration.ConnectionString) { + delta.Add("Spec.StorageConfiguration.PineconeConfiguration.ConnectionString", a.ko.Spec.StorageConfiguration.PineconeConfiguration.ConnectionString, b.ko.Spec.StorageConfiguration.PineconeConfiguration.ConnectionString) + } else if a.ko.Spec.StorageConfiguration.PineconeConfiguration.ConnectionString != nil && b.ko.Spec.StorageConfiguration.PineconeConfiguration.ConnectionString != nil { + if *a.ko.Spec.StorageConfiguration.PineconeConfiguration.ConnectionString != *b.ko.Spec.StorageConfiguration.PineconeConfiguration.ConnectionString { + delta.Add("Spec.StorageConfiguration.PineconeConfiguration.ConnectionString", a.ko.Spec.StorageConfiguration.PineconeConfiguration.ConnectionString, b.ko.Spec.StorageConfiguration.PineconeConfiguration.ConnectionString) + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.PineconeConfiguration.CredentialsSecretARN, b.ko.Spec.StorageConfiguration.PineconeConfiguration.CredentialsSecretARN) { + delta.Add("Spec.StorageConfiguration.PineconeConfiguration.CredentialsSecretARN", a.ko.Spec.StorageConfiguration.PineconeConfiguration.CredentialsSecretARN, b.ko.Spec.StorageConfiguration.PineconeConfiguration.CredentialsSecretARN) + } else if a.ko.Spec.StorageConfiguration.PineconeConfiguration.CredentialsSecretARN != nil && b.ko.Spec.StorageConfiguration.PineconeConfiguration.CredentialsSecretARN != nil { + if *a.ko.Spec.StorageConfiguration.PineconeConfiguration.CredentialsSecretARN != *b.ko.Spec.StorageConfiguration.PineconeConfiguration.CredentialsSecretARN { + delta.Add("Spec.StorageConfiguration.PineconeConfiguration.CredentialsSecretARN", a.ko.Spec.StorageConfiguration.PineconeConfiguration.CredentialsSecretARN, b.ko.Spec.StorageConfiguration.PineconeConfiguration.CredentialsSecretARN) + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping, b.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping) { + delta.Add("Spec.StorageConfiguration.PineconeConfiguration.FieldMapping", a.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping, b.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping) + } else if a.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping != nil && b.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping != nil { + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping.MetadataField, b.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping.MetadataField) { + delta.Add("Spec.StorageConfiguration.PineconeConfiguration.FieldMapping.MetadataField", a.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping.MetadataField, b.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping.MetadataField) + } else if a.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping.MetadataField != nil && b.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping.MetadataField != nil { + if *a.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping.MetadataField != *b.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping.MetadataField { + delta.Add("Spec.StorageConfiguration.PineconeConfiguration.FieldMapping.MetadataField", a.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping.MetadataField, b.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping.MetadataField) + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping.TextField, b.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping.TextField) { + delta.Add("Spec.StorageConfiguration.PineconeConfiguration.FieldMapping.TextField", a.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping.TextField, b.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping.TextField) + } else if a.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping.TextField != nil && b.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping.TextField != nil { + if *a.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping.TextField != *b.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping.TextField { + delta.Add("Spec.StorageConfiguration.PineconeConfiguration.FieldMapping.TextField", a.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping.TextField, b.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping.TextField) + } + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.PineconeConfiguration.Namespace, b.ko.Spec.StorageConfiguration.PineconeConfiguration.Namespace) { + delta.Add("Spec.StorageConfiguration.PineconeConfiguration.Namespace", a.ko.Spec.StorageConfiguration.PineconeConfiguration.Namespace, b.ko.Spec.StorageConfiguration.PineconeConfiguration.Namespace) + } else if a.ko.Spec.StorageConfiguration.PineconeConfiguration.Namespace != nil && b.ko.Spec.StorageConfiguration.PineconeConfiguration.Namespace != nil { + if *a.ko.Spec.StorageConfiguration.PineconeConfiguration.Namespace != *b.ko.Spec.StorageConfiguration.PineconeConfiguration.Namespace { + delta.Add("Spec.StorageConfiguration.PineconeConfiguration.Namespace", a.ko.Spec.StorageConfiguration.PineconeConfiguration.Namespace, b.ko.Spec.StorageConfiguration.PineconeConfiguration.Namespace) + } + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.RdsConfiguration, b.ko.Spec.StorageConfiguration.RdsConfiguration) { + delta.Add("Spec.StorageConfiguration.RdsConfiguration", a.ko.Spec.StorageConfiguration.RdsConfiguration, b.ko.Spec.StorageConfiguration.RdsConfiguration) + } else if a.ko.Spec.StorageConfiguration.RdsConfiguration != nil && b.ko.Spec.StorageConfiguration.RdsConfiguration != nil { + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.RdsConfiguration.CredentialsSecretARN, b.ko.Spec.StorageConfiguration.RdsConfiguration.CredentialsSecretARN) { + delta.Add("Spec.StorageConfiguration.RdsConfiguration.CredentialsSecretARN", a.ko.Spec.StorageConfiguration.RdsConfiguration.CredentialsSecretARN, b.ko.Spec.StorageConfiguration.RdsConfiguration.CredentialsSecretARN) + } else if a.ko.Spec.StorageConfiguration.RdsConfiguration.CredentialsSecretARN != nil && b.ko.Spec.StorageConfiguration.RdsConfiguration.CredentialsSecretARN != nil { + if *a.ko.Spec.StorageConfiguration.RdsConfiguration.CredentialsSecretARN != *b.ko.Spec.StorageConfiguration.RdsConfiguration.CredentialsSecretARN { + delta.Add("Spec.StorageConfiguration.RdsConfiguration.CredentialsSecretARN", a.ko.Spec.StorageConfiguration.RdsConfiguration.CredentialsSecretARN, b.ko.Spec.StorageConfiguration.RdsConfiguration.CredentialsSecretARN) + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.RdsConfiguration.DatabaseName, b.ko.Spec.StorageConfiguration.RdsConfiguration.DatabaseName) { + delta.Add("Spec.StorageConfiguration.RdsConfiguration.DatabaseName", a.ko.Spec.StorageConfiguration.RdsConfiguration.DatabaseName, b.ko.Spec.StorageConfiguration.RdsConfiguration.DatabaseName) + } else if a.ko.Spec.StorageConfiguration.RdsConfiguration.DatabaseName != nil && b.ko.Spec.StorageConfiguration.RdsConfiguration.DatabaseName != nil { + if *a.ko.Spec.StorageConfiguration.RdsConfiguration.DatabaseName != *b.ko.Spec.StorageConfiguration.RdsConfiguration.DatabaseName { + delta.Add("Spec.StorageConfiguration.RdsConfiguration.DatabaseName", a.ko.Spec.StorageConfiguration.RdsConfiguration.DatabaseName, b.ko.Spec.StorageConfiguration.RdsConfiguration.DatabaseName) + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping, b.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping) { + delta.Add("Spec.StorageConfiguration.RdsConfiguration.FieldMapping", a.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping, b.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping) + } else if a.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping != nil && b.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping != nil { + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.MetadataField, b.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.MetadataField) { + delta.Add("Spec.StorageConfiguration.RdsConfiguration.FieldMapping.MetadataField", a.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.MetadataField, b.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.MetadataField) + } else if a.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.MetadataField != nil && b.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.MetadataField != nil { + if *a.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.MetadataField != *b.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.MetadataField { + delta.Add("Spec.StorageConfiguration.RdsConfiguration.FieldMapping.MetadataField", a.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.MetadataField, b.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.MetadataField) + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.PrimaryKeyField, b.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.PrimaryKeyField) { + delta.Add("Spec.StorageConfiguration.RdsConfiguration.FieldMapping.PrimaryKeyField", a.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.PrimaryKeyField, b.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.PrimaryKeyField) + } else if a.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.PrimaryKeyField != nil && b.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.PrimaryKeyField != nil { + if *a.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.PrimaryKeyField != *b.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.PrimaryKeyField { + delta.Add("Spec.StorageConfiguration.RdsConfiguration.FieldMapping.PrimaryKeyField", a.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.PrimaryKeyField, b.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.PrimaryKeyField) + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.TextField, b.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.TextField) { + delta.Add("Spec.StorageConfiguration.RdsConfiguration.FieldMapping.TextField", a.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.TextField, b.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.TextField) + } else if a.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.TextField != nil && b.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.TextField != nil { + if *a.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.TextField != *b.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.TextField { + delta.Add("Spec.StorageConfiguration.RdsConfiguration.FieldMapping.TextField", a.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.TextField, b.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.TextField) + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.VectorField, b.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.VectorField) { + delta.Add("Spec.StorageConfiguration.RdsConfiguration.FieldMapping.VectorField", a.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.VectorField, b.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.VectorField) + } else if a.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.VectorField != nil && b.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.VectorField != nil { + if *a.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.VectorField != *b.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.VectorField { + delta.Add("Spec.StorageConfiguration.RdsConfiguration.FieldMapping.VectorField", a.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.VectorField, b.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.VectorField) + } + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.RdsConfiguration.ResourceARN, b.ko.Spec.StorageConfiguration.RdsConfiguration.ResourceARN) { + delta.Add("Spec.StorageConfiguration.RdsConfiguration.ResourceARN", a.ko.Spec.StorageConfiguration.RdsConfiguration.ResourceARN, b.ko.Spec.StorageConfiguration.RdsConfiguration.ResourceARN) + } else if a.ko.Spec.StorageConfiguration.RdsConfiguration.ResourceARN != nil && b.ko.Spec.StorageConfiguration.RdsConfiguration.ResourceARN != nil { + if *a.ko.Spec.StorageConfiguration.RdsConfiguration.ResourceARN != *b.ko.Spec.StorageConfiguration.RdsConfiguration.ResourceARN { + delta.Add("Spec.StorageConfiguration.RdsConfiguration.ResourceARN", a.ko.Spec.StorageConfiguration.RdsConfiguration.ResourceARN, b.ko.Spec.StorageConfiguration.RdsConfiguration.ResourceARN) + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.RdsConfiguration.TableName, b.ko.Spec.StorageConfiguration.RdsConfiguration.TableName) { + delta.Add("Spec.StorageConfiguration.RdsConfiguration.TableName", a.ko.Spec.StorageConfiguration.RdsConfiguration.TableName, b.ko.Spec.StorageConfiguration.RdsConfiguration.TableName) + } else if a.ko.Spec.StorageConfiguration.RdsConfiguration.TableName != nil && b.ko.Spec.StorageConfiguration.RdsConfiguration.TableName != nil { + if *a.ko.Spec.StorageConfiguration.RdsConfiguration.TableName != *b.ko.Spec.StorageConfiguration.RdsConfiguration.TableName { + delta.Add("Spec.StorageConfiguration.RdsConfiguration.TableName", a.ko.Spec.StorageConfiguration.RdsConfiguration.TableName, b.ko.Spec.StorageConfiguration.RdsConfiguration.TableName) + } + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration, b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration) { + delta.Add("Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration", a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration, b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration) + } else if a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration != nil && b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration != nil { + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.CredentialsSecretARN, b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.CredentialsSecretARN) { + delta.Add("Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.CredentialsSecretARN", a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.CredentialsSecretARN, b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.CredentialsSecretARN) + } else if a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.CredentialsSecretARN != nil && b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.CredentialsSecretARN != nil { + if *a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.CredentialsSecretARN != *b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.CredentialsSecretARN { + delta.Add("Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.CredentialsSecretARN", a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.CredentialsSecretARN, b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.CredentialsSecretARN) + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.Endpoint, b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.Endpoint) { + delta.Add("Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.Endpoint", a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.Endpoint, b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.Endpoint) + } else if a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.Endpoint != nil && b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.Endpoint != nil { + if *a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.Endpoint != *b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.Endpoint { + delta.Add("Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.Endpoint", a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.Endpoint, b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.Endpoint) + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping, b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping) { + delta.Add("Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping", a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping, b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping) + } else if a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping != nil && b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping != nil { + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.MetadataField, b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.MetadataField) { + delta.Add("Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.MetadataField", a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.MetadataField, b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.MetadataField) + } else if a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.MetadataField != nil && b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.MetadataField != nil { + if *a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.MetadataField != *b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.MetadataField { + delta.Add("Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.MetadataField", a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.MetadataField, b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.MetadataField) + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.TextField, b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.TextField) { + delta.Add("Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.TextField", a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.TextField, b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.TextField) + } else if a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.TextField != nil && b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.TextField != nil { + if *a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.TextField != *b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.TextField { + delta.Add("Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.TextField", a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.TextField, b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.TextField) + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.VectorField, b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.VectorField) { + delta.Add("Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.VectorField", a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.VectorField, b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.VectorField) + } else if a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.VectorField != nil && b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.VectorField != nil { + if *a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.VectorField != *b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.VectorField { + delta.Add("Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.VectorField", a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.VectorField, b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.VectorField) + } + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.VectorIndexName, b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.VectorIndexName) { + delta.Add("Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.VectorIndexName", a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.VectorIndexName, b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.VectorIndexName) + } else if a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.VectorIndexName != nil && b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.VectorIndexName != nil { + if *a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.VectorIndexName != *b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.VectorIndexName { + delta.Add("Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.VectorIndexName", a.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.VectorIndexName, b.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.VectorIndexName) + } + } + } + if ackcompare.HasNilDifference(a.ko.Spec.StorageConfiguration.Type, b.ko.Spec.StorageConfiguration.Type) { + delta.Add("Spec.StorageConfiguration.Type", a.ko.Spec.StorageConfiguration.Type, b.ko.Spec.StorageConfiguration.Type) + } else if a.ko.Spec.StorageConfiguration.Type != nil && b.ko.Spec.StorageConfiguration.Type != nil { + if *a.ko.Spec.StorageConfiguration.Type != *b.ko.Spec.StorageConfiguration.Type { + delta.Add("Spec.StorageConfiguration.Type", a.ko.Spec.StorageConfiguration.Type, b.ko.Spec.StorageConfiguration.Type) + } + } + } + desiredACKTags, _ := convertToOrderedACKTags(a.ko.Spec.Tags) + latestACKTags, _ := convertToOrderedACKTags(b.ko.Spec.Tags) + if !ackcompare.MapStringStringEqual(desiredACKTags, latestACKTags) { + delta.Add("Spec.Tags", a.ko.Spec.Tags, b.ko.Spec.Tags) + } + + return delta +} diff --git a/pkg/resource/knowledge_base/descriptor.go b/pkg/resource/knowledge_base/descriptor.go new file mode 100644 index 0000000..ef6bcad --- /dev/null +++ b/pkg/resource/knowledge_base/descriptor.go @@ -0,0 +1,155 @@ +// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"). You may +// not use this file except in compliance with the License. A copy of the +// License is located at +// +// http://aws.amazon.com/apache2.0/ +// +// or in the "license" file accompanying this file. This file is distributed +// on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +// express or implied. See the License for the specific language governing +// permissions and limitations under the License. + +// Code generated by ack-generate. DO NOT EDIT. + +package knowledge_base + +import ( + ackv1alpha1 "github.com/aws-controllers-k8s/runtime/apis/core/v1alpha1" + ackcompare "github.com/aws-controllers-k8s/runtime/pkg/compare" + acktypes "github.com/aws-controllers-k8s/runtime/pkg/types" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" + rtclient "sigs.k8s.io/controller-runtime/pkg/client" + k8sctrlutil "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" + + svcapitypes "github.com/aws-controllers-k8s/bedrockagent-controller/apis/v1alpha1" +) + +const ( + FinalizerString = "finalizers.bedrockagent.services.k8s.aws/KnowledgeBase" +) + +var ( + GroupVersionResource = svcapitypes.GroupVersion.WithResource("knowledgebases") + GroupKind = metav1.GroupKind{ + Group: "bedrockagent.services.k8s.aws", + Kind: "KnowledgeBase", + } +) + +// resourceDescriptor implements the +// `aws-service-operator-k8s/pkg/types.AWSResourceDescriptor` interface +type resourceDescriptor struct { +} + +// GroupVersionKind returns a Kubernetes schema.GroupVersionKind struct that +// describes the API Group, Version and Kind of CRs described by the descriptor +func (d *resourceDescriptor) GroupVersionKind() schema.GroupVersionKind { + return svcapitypes.GroupVersion.WithKind(GroupKind.Kind) +} + +// EmptyRuntimeObject returns an empty object prototype that may be used in +// apimachinery and k8s client operations +func (d *resourceDescriptor) EmptyRuntimeObject() rtclient.Object { + return &svcapitypes.KnowledgeBase{} +} + +// ResourceFromRuntimeObject returns an AWSResource that has been initialized +// with the supplied runtime.Object +func (d *resourceDescriptor) ResourceFromRuntimeObject( + obj rtclient.Object, +) acktypes.AWSResource { + return &resource{ + ko: obj.(*svcapitypes.KnowledgeBase), + } +} + +// Delta returns an `ackcompare.Delta` object containing the difference between +// one `AWSResource` and another. +func (d *resourceDescriptor) Delta(a, b acktypes.AWSResource) *ackcompare.Delta { + return newResourceDelta(a.(*resource), b.(*resource)) +} + +// IsManaged returns true if the supplied AWSResource is under the management +// of an ACK service controller. What this means in practice is that the +// underlying custom resource (CR) in the AWSResource has had a +// resource-specific finalizer associated with it. +func (d *resourceDescriptor) IsManaged( + res acktypes.AWSResource, +) bool { + obj := res.RuntimeObject() + if obj == nil { + // Should not happen. If it does, there is a bug in the code + panic("nil RuntimeMetaObject in AWSResource") + } + // Remove use of custom code once + // https://github.com/kubernetes-sigs/controller-runtime/issues/994 is + // fixed. This should be able to be: + // + // return k8sctrlutil.ContainsFinalizer(obj, FinalizerString) + return containsFinalizer(obj, FinalizerString) +} + +// Remove once https://github.com/kubernetes-sigs/controller-runtime/issues/994 +// is fixed. +func containsFinalizer(obj rtclient.Object, finalizer string) bool { + f := obj.GetFinalizers() + for _, e := range f { + if e == finalizer { + return true + } + } + return false +} + +// MarkManaged places the supplied resource under the management of ACK. What +// this typically means is that the resource manager will decorate the +// underlying custom resource (CR) with a finalizer that indicates ACK is +// managing the resource and the underlying CR may not be deleted until ACK is +// finished cleaning up any backend AWS service resources associated with the +// CR. +func (d *resourceDescriptor) MarkManaged( + res acktypes.AWSResource, +) { + obj := res.RuntimeObject() + if obj == nil { + // Should not happen. If it does, there is a bug in the code + panic("nil RuntimeMetaObject in AWSResource") + } + k8sctrlutil.AddFinalizer(obj, FinalizerString) +} + +// MarkUnmanaged removes the supplied resource from management by ACK. What +// this typically means is that the resource manager will remove a finalizer +// underlying custom resource (CR) that indicates ACK is managing the resource. +// This will allow the Kubernetes API server to delete the underlying CR. +func (d *resourceDescriptor) MarkUnmanaged( + res acktypes.AWSResource, +) { + obj := res.RuntimeObject() + if obj == nil { + // Should not happen. If it does, there is a bug in the code + panic("nil RuntimeMetaObject in AWSResource") + } + k8sctrlutil.RemoveFinalizer(obj, FinalizerString) +} + +// MarkAdopted places descriptors on the custom resource that indicate the +// resource was not created from within ACK. +func (d *resourceDescriptor) MarkAdopted( + res acktypes.AWSResource, +) { + obj := res.RuntimeObject() + if obj == nil { + // Should not happen. If it does, there is a bug in the code + panic("nil RuntimeObject in AWSResource") + } + curr := obj.GetAnnotations() + if curr == nil { + curr = make(map[string]string) + } + curr[ackv1alpha1.AnnotationAdopted] = "true" + obj.SetAnnotations(curr) +} diff --git a/pkg/resource/knowledge_base/identifiers.go b/pkg/resource/knowledge_base/identifiers.go new file mode 100644 index 0000000..8a1fef0 --- /dev/null +++ b/pkg/resource/knowledge_base/identifiers.go @@ -0,0 +1,55 @@ +// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"). You may +// not use this file except in compliance with the License. A copy of the +// License is located at +// +// http://aws.amazon.com/apache2.0/ +// +// or in the "license" file accompanying this file. This file is distributed +// on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +// express or implied. See the License for the specific language governing +// permissions and limitations under the License. + +// Code generated by ack-generate. DO NOT EDIT. + +package knowledge_base + +import ( + ackv1alpha1 "github.com/aws-controllers-k8s/runtime/apis/core/v1alpha1" +) + +// resourceIdentifiers implements the +// `aws-service-operator-k8s/pkg/types.AWSResourceIdentifiers` interface +type resourceIdentifiers struct { + meta *ackv1alpha1.ResourceMetadata +} + +// ARN returns the AWS Resource Name for the backend AWS resource. If nil, +// this means the resource has not yet been created in the backend AWS +// service. +func (ri *resourceIdentifiers) ARN() *ackv1alpha1.AWSResourceName { + if ri.meta != nil { + return ri.meta.ARN + } + return nil +} + +// OwnerAccountID returns the AWS account identifier in which the +// backend AWS resource resides, or nil if this information is not known +// for the resource +func (ri *resourceIdentifiers) OwnerAccountID() *ackv1alpha1.AWSAccountID { + if ri.meta != nil { + return ri.meta.OwnerAccountID + } + return nil +} + +// Region returns the AWS region in which the resource exists, or +// nil if this information is not known. +func (ri *resourceIdentifiers) Region() *ackv1alpha1.AWSRegion { + if ri.meta != nil { + return ri.meta.Region + } + return nil +} diff --git a/pkg/resource/knowledge_base/manager.go b/pkg/resource/knowledge_base/manager.go new file mode 100644 index 0000000..3bebca3 --- /dev/null +++ b/pkg/resource/knowledge_base/manager.go @@ -0,0 +1,412 @@ +// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"). You may +// not use this file except in compliance with the License. A copy of the +// License is located at +// +// http://aws.amazon.com/apache2.0/ +// +// or in the "license" file accompanying this file. This file is distributed +// on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +// express or implied. See the License for the specific language governing +// permissions and limitations under the License. + +// Code generated by ack-generate. DO NOT EDIT. + +package knowledge_base + +import ( + "context" + "fmt" + "time" + + ackv1alpha1 "github.com/aws-controllers-k8s/runtime/apis/core/v1alpha1" + ackcompare "github.com/aws-controllers-k8s/runtime/pkg/compare" + ackcondition "github.com/aws-controllers-k8s/runtime/pkg/condition" + ackcfg "github.com/aws-controllers-k8s/runtime/pkg/config" + ackerr "github.com/aws-controllers-k8s/runtime/pkg/errors" + ackmetrics "github.com/aws-controllers-k8s/runtime/pkg/metrics" + ackrequeue "github.com/aws-controllers-k8s/runtime/pkg/requeue" + ackrt "github.com/aws-controllers-k8s/runtime/pkg/runtime" + ackrtlog "github.com/aws-controllers-k8s/runtime/pkg/runtime/log" + acktags "github.com/aws-controllers-k8s/runtime/pkg/tags" + acktypes "github.com/aws-controllers-k8s/runtime/pkg/types" + ackutil "github.com/aws-controllers-k8s/runtime/pkg/util" + "github.com/aws/aws-sdk-go-v2/aws" + svcsdk "github.com/aws/aws-sdk-go-v2/service/bedrockagent" + "github.com/go-logr/logr" + corev1 "k8s.io/api/core/v1" + + svcapitypes "github.com/aws-controllers-k8s/bedrockagent-controller/apis/v1alpha1" +) + +var ( + _ = ackutil.InStrings + _ = acktags.NewTags() + _ = ackrt.MissingImageTagValue + _ = svcapitypes.KnowledgeBase{} +) + +// +kubebuilder:rbac:groups=bedrockagent.services.k8s.aws,resources=knowledgebases,verbs=get;list;watch;create;update;patch;delete +// +kubebuilder:rbac:groups=bedrockagent.services.k8s.aws,resources=knowledgebases/status,verbs=get;update;patch + +var lateInitializeFieldNames = []string{} + +// resourceManager is responsible for providing a consistent way to perform +// CRUD operations in a backend AWS service API for Book custom resources. +type resourceManager struct { + // cfg is a copy of the ackcfg.Config object passed on start of the service + // controller + cfg ackcfg.Config + // clientcfg is a copy of the client configuration passed on start of the + // service controller + clientcfg aws.Config + // log refers to the logr.Logger object handling logging for the service + // controller + log logr.Logger + // metrics contains a collection of Prometheus metric objects that the + // service controller and its reconcilers track + metrics *ackmetrics.Metrics + // rr is the Reconciler which can be used for various utility + // functions such as querying for Secret values given a SecretReference + rr acktypes.Reconciler + // awsAccountID is the AWS account identifier that contains the resources + // managed by this resource manager + awsAccountID ackv1alpha1.AWSAccountID + // The AWS Region that this resource manager targets + awsRegion ackv1alpha1.AWSRegion + // sdk is a pointer to the AWS service API client exposed by the + // aws-sdk-go-v2/services/{alias} package. + sdkapi *svcsdk.Client +} + +// concreteResource returns a pointer to a resource from the supplied +// generic AWSResource interface +func (rm *resourceManager) concreteResource( + res acktypes.AWSResource, +) *resource { + // cast the generic interface into a pointer type specific to the concrete + // implementing resource type managed by this resource manager + return res.(*resource) +} + +// ReadOne returns the currently-observed state of the supplied AWSResource in +// the backend AWS service API. +func (rm *resourceManager) ReadOne( + ctx context.Context, + res acktypes.AWSResource, +) (acktypes.AWSResource, error) { + r := rm.concreteResource(res) + if r.ko == nil { + // Should never happen... if it does, it's buggy code. + panic("resource manager's ReadOne() method received resource with nil CR object") + } + observed, err := rm.sdkFind(ctx, r) + mirrorAWSTags(r, observed) + if err != nil { + if observed != nil { + return rm.onError(observed, err) + } + return rm.onError(r, err) + } + return rm.onSuccess(observed) +} + +// Create attempts to create the supplied AWSResource in the backend AWS +// service API, returning an AWSResource representing the newly-created +// resource +func (rm *resourceManager) Create( + ctx context.Context, + res acktypes.AWSResource, +) (acktypes.AWSResource, error) { + r := rm.concreteResource(res) + if r.ko == nil { + // Should never happen... if it does, it's buggy code. + panic("resource manager's Create() method received resource with nil CR object") + } + created, err := rm.sdkCreate(ctx, r) + if err != nil { + if created != nil { + return rm.onError(created, err) + } + return rm.onError(r, err) + } + return rm.onSuccess(created) +} + +// Update attempts to mutate the supplied desired AWSResource in the backend AWS +// service API, returning an AWSResource representing the newly-mutated +// resource. +// Note for specialized logic implementers can check to see how the latest +// observed resource differs from the supplied desired state. The +// higher-level reonciler determines whether or not the desired differs +// from the latest observed and decides whether to call the resource +// manager's Update method +func (rm *resourceManager) Update( + ctx context.Context, + resDesired acktypes.AWSResource, + resLatest acktypes.AWSResource, + delta *ackcompare.Delta, +) (acktypes.AWSResource, error) { + desired := rm.concreteResource(resDesired) + latest := rm.concreteResource(resLatest) + if desired.ko == nil || latest.ko == nil { + // Should never happen... if it does, it's buggy code. + panic("resource manager's Update() method received resource with nil CR object") + } + updated, err := rm.sdkUpdate(ctx, desired, latest, delta) + if err != nil { + if updated != nil { + return rm.onError(updated, err) + } + return rm.onError(latest, err) + } + return rm.onSuccess(updated) +} + +// Delete attempts to destroy the supplied AWSResource in the backend AWS +// service API, returning an AWSResource representing the +// resource being deleted (if delete is asynchronous and takes time) +func (rm *resourceManager) Delete( + ctx context.Context, + res acktypes.AWSResource, +) (acktypes.AWSResource, error) { + r := rm.concreteResource(res) + if r.ko == nil { + // Should never happen... if it does, it's buggy code. + panic("resource manager's Update() method received resource with nil CR object") + } + observed, err := rm.sdkDelete(ctx, r) + if err != nil { + if observed != nil { + return rm.onError(observed, err) + } + return rm.onError(r, err) + } + + return rm.onSuccess(observed) +} + +// ARNFromName returns an AWS Resource Name from a given string name. This +// is useful for constructing ARNs for APIs that require ARNs in their +// GetAttributes operations but all we have (for new CRs at least) is a +// name for the resource +func (rm *resourceManager) ARNFromName(name string) string { + return fmt.Sprintf( + "arn:aws:bedrockagent:%s:%s:%s", + rm.awsRegion, + rm.awsAccountID, + name, + ) +} + +// LateInitialize returns an acktypes.AWSResource after setting the late initialized +// fields from the readOne call. This method will initialize the optional fields +// which were not provided by the k8s user but were defaulted by the AWS service. +// If there are no such fields to be initialized, the returned object is similar to +// object passed in the parameter. +func (rm *resourceManager) LateInitialize( + ctx context.Context, + latest acktypes.AWSResource, +) (acktypes.AWSResource, error) { + rlog := ackrtlog.FromContext(ctx) + // If there are no fields to late initialize, do nothing + if len(lateInitializeFieldNames) == 0 { + rlog.Debug("no late initialization required.") + return latest, nil + } + latestCopy := latest.DeepCopy() + lateInitConditionReason := "" + lateInitConditionMessage := "" + observed, err := rm.ReadOne(ctx, latestCopy) + if err != nil { + lateInitConditionMessage = "Unable to complete Read operation required for late initialization" + lateInitConditionReason = "Late Initialization Failure" + ackcondition.SetLateInitialized(latestCopy, corev1.ConditionFalse, &lateInitConditionMessage, &lateInitConditionReason) + ackcondition.SetSynced(latestCopy, corev1.ConditionFalse, nil, nil) + return latestCopy, err + } + lateInitializedRes := rm.lateInitializeFromReadOneOutput(observed, latestCopy) + incompleteInitialization := rm.incompleteLateInitialization(lateInitializedRes) + if incompleteInitialization { + // Add the condition with LateInitialized=False + lateInitConditionMessage = "Late initialization did not complete, requeuing with delay of 5 seconds" + lateInitConditionReason = "Delayed Late Initialization" + ackcondition.SetLateInitialized(lateInitializedRes, corev1.ConditionFalse, &lateInitConditionMessage, &lateInitConditionReason) + ackcondition.SetSynced(lateInitializedRes, corev1.ConditionFalse, nil, nil) + return lateInitializedRes, ackrequeue.NeededAfter(nil, time.Duration(5)*time.Second) + } + // Set LateInitialized condition to True + lateInitConditionMessage = "Late initialization successful" + lateInitConditionReason = "Late initialization successful" + ackcondition.SetLateInitialized(lateInitializedRes, corev1.ConditionTrue, &lateInitConditionMessage, &lateInitConditionReason) + return lateInitializedRes, nil +} + +// incompleteLateInitialization return true if there are fields which were supposed to be +// late initialized but are not. If all the fields are late initialized, false is returned +func (rm *resourceManager) incompleteLateInitialization( + res acktypes.AWSResource, +) bool { + return false +} + +// lateInitializeFromReadOneOutput late initializes the 'latest' resource from the 'observed' +// resource and returns 'latest' resource +func (rm *resourceManager) lateInitializeFromReadOneOutput( + observed acktypes.AWSResource, + latest acktypes.AWSResource, +) acktypes.AWSResource { + return latest +} + +// IsSynced returns true if the resource is synced. +func (rm *resourceManager) IsSynced(ctx context.Context, res acktypes.AWSResource) (bool, error) { + r := rm.concreteResource(res) + if r.ko == nil { + // Should never happen... if it does, it's buggy code. + panic("resource manager's IsSynced() method received resource with nil CR object") + } + + if r.ko.Status.Status == nil { + return false, nil + } + statusCandidates := []string{"ACTIVE"} + if !ackutil.InStrings(*r.ko.Status.Status, statusCandidates) { + return false, nil + } + + return true, nil +} + +// EnsureTags ensures that tags are present inside the AWSResource. +// If the AWSResource does not have any existing resource tags, the 'tags' +// field is initialized and the controller tags are added. +// If the AWSResource has existing resource tags, then controller tags are +// added to the existing resource tags without overriding them. +// If the AWSResource does not support tags, only then the controller tags +// will not be added to the AWSResource. +func (rm *resourceManager) EnsureTags( + ctx context.Context, + res acktypes.AWSResource, + md acktypes.ServiceControllerMetadata, +) error { + r := rm.concreteResource(res) + if r.ko == nil { + // Should never happen... if it does, it's buggy code. + panic("resource manager's EnsureTags method received resource with nil CR object") + } + defaultTags := ackrt.GetDefaultTags(&rm.cfg, r.ko, md) + var existingTags map[string]*string + existingTags = r.ko.Spec.Tags + resourceTags, keyOrder := convertToOrderedACKTags(existingTags) + tags := acktags.Merge(resourceTags, defaultTags) + r.ko.Spec.Tags = fromACKTags(tags, keyOrder) + return nil +} + +// FilterAWSTags ignores tags that have keys that start with "aws:" +// is needed to ensure the controller does not attempt to remove +// tags set by AWS. This function needs to be called after each Read +// operation. +// Eg. resources created with cloudformation have tags that cannot be +// removed by an ACK controller +func (rm *resourceManager) FilterSystemTags(res acktypes.AWSResource) { + r := rm.concreteResource(res) + if r == nil || r.ko == nil { + return + } + var existingTags map[string]*string + existingTags = r.ko.Spec.Tags + resourceTags, tagKeyOrder := convertToOrderedACKTags(existingTags) + ignoreSystemTags(resourceTags) + r.ko.Spec.Tags = fromACKTags(resourceTags, tagKeyOrder) +} + +// mirrorAWSTags ensures that AWS tags are included in the desired resource +// if they are present in the latest resource. This will ensure that the +// aws tags are not present in a diff. The logic of the controller will +// ensure these tags aren't patched to the resource in the cluster, and +// will only be present to make sure we don't try to remove these tags. +// +// Although there are a lot of similarities between this function and +// EnsureTags, they are very much different. +// While EnsureTags tries to make sure the resource contains the controller +// tags, mirrowAWSTags tries to make sure tags injected by AWS are mirrored +// from the latest resoruce to the desired resource. +func mirrorAWSTags(a *resource, b *resource) { + if a == nil || a.ko == nil || b == nil || b.ko == nil { + return + } + var existingLatestTags map[string]*string + var existingDesiredTags map[string]*string + existingDesiredTags = a.ko.Spec.Tags + existingLatestTags = b.ko.Spec.Tags + desiredTags, desiredTagKeyOrder := convertToOrderedACKTags(existingDesiredTags) + latestTags, _ := convertToOrderedACKTags(existingLatestTags) + syncAWSTags(desiredTags, latestTags) + a.ko.Spec.Tags = fromACKTags(desiredTags, desiredTagKeyOrder) +} + +// newResourceManager returns a new struct implementing +// acktypes.AWSResourceManager +// This is for AWS-SDK-GO-V2 - Created newResourceManager With AWS sdk-Go-ClientV2 +func newResourceManager( + cfg ackcfg.Config, + clientcfg aws.Config, + log logr.Logger, + metrics *ackmetrics.Metrics, + rr acktypes.Reconciler, + id ackv1alpha1.AWSAccountID, + region ackv1alpha1.AWSRegion, +) (*resourceManager, error) { + return &resourceManager{ + cfg: cfg, + clientcfg: clientcfg, + log: log, + metrics: metrics, + rr: rr, + awsAccountID: id, + awsRegion: region, + sdkapi: svcsdk.NewFromConfig(clientcfg), + }, nil +} + +// onError updates resource conditions and returns updated resource +// it returns nil if no condition is updated. +func (rm *resourceManager) onError( + r *resource, + err error, +) (acktypes.AWSResource, error) { + if r == nil { + return nil, err + } + r1, updated := rm.updateConditions(r, false, err) + if !updated { + return r, err + } + for _, condition := range r1.Conditions() { + if condition.Type == ackv1alpha1.ConditionTypeTerminal && + condition.Status == corev1.ConditionTrue { + // resource is in Terminal condition + // return Terminal error + return r1, ackerr.Terminal + } + } + return r1, err +} + +// onSuccess updates resource conditions and returns updated resource +// it returns the supplied resource if no condition is updated. +func (rm *resourceManager) onSuccess( + r *resource, +) (acktypes.AWSResource, error) { + if r == nil { + return nil, nil + } + r1, updated := rm.updateConditions(r, true, nil) + if !updated { + return r, nil + } + return r1, nil +} diff --git a/pkg/resource/knowledge_base/manager_factory.go b/pkg/resource/knowledge_base/manager_factory.go new file mode 100644 index 0000000..e42695b --- /dev/null +++ b/pkg/resource/knowledge_base/manager_factory.go @@ -0,0 +1,100 @@ +// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"). You may +// not use this file except in compliance with the License. A copy of the +// License is located at +// +// http://aws.amazon.com/apache2.0/ +// +// or in the "license" file accompanying this file. This file is distributed +// on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +// express or implied. See the License for the specific language governing +// permissions and limitations under the License. + +// Code generated by ack-generate. DO NOT EDIT. + +package knowledge_base + +import ( + "fmt" + "sync" + + ackv1alpha1 "github.com/aws-controllers-k8s/runtime/apis/core/v1alpha1" + ackcfg "github.com/aws-controllers-k8s/runtime/pkg/config" + ackmetrics "github.com/aws-controllers-k8s/runtime/pkg/metrics" + acktypes "github.com/aws-controllers-k8s/runtime/pkg/types" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/go-logr/logr" + + svcresource "github.com/aws-controllers-k8s/bedrockagent-controller/pkg/resource" +) + +// resourceManagerFactory produces resourceManager objects. It implements the +// `types.AWSResourceManagerFactory` interface. +type resourceManagerFactory struct { + sync.RWMutex + // rmCache contains resource managers for a particular AWS account ID + rmCache map[string]*resourceManager +} + +// ResourcePrototype returns an AWSResource that resource managers produced by +// this factory will handle +func (f *resourceManagerFactory) ResourceDescriptor() acktypes.AWSResourceDescriptor { + return &resourceDescriptor{} +} + +// ManagerFor returns a resource manager object that can manage resources for a +// supplied AWS account +func (f *resourceManagerFactory) ManagerFor( + cfg ackcfg.Config, + clientcfg aws.Config, + log logr.Logger, + metrics *ackmetrics.Metrics, + rr acktypes.Reconciler, + id ackv1alpha1.AWSAccountID, + region ackv1alpha1.AWSRegion, + roleARN ackv1alpha1.AWSResourceName, +) (acktypes.AWSResourceManager, error) { + // We use the account ID, region, and role ARN to uniquely identify a + // resource manager. This helps us to avoid creating multiple resource + // managers for the same account/region/roleARN combination. + rmId := fmt.Sprintf("%s/%s/%s", id, region, roleARN) + f.RLock() + rm, found := f.rmCache[rmId] + f.RUnlock() + + if found { + return rm, nil + } + + f.Lock() + defer f.Unlock() + + rm, err := newResourceManager(cfg, clientcfg, log, metrics, rr, id, region) + if err != nil { + return nil, err + } + f.rmCache[rmId] = rm + return rm, nil +} + +// IsAdoptable returns true if the resource is able to be adopted +func (f *resourceManagerFactory) IsAdoptable() bool { + return true +} + +// RequeueOnSuccessSeconds returns true if the resource should be requeued after specified seconds +// Default is false which means resource will not be requeued after success. +func (f *resourceManagerFactory) RequeueOnSuccessSeconds() int { + return 0 +} + +func newResourceManagerFactory() *resourceManagerFactory { + return &resourceManagerFactory{ + rmCache: map[string]*resourceManager{}, + } +} + +func init() { + svcresource.RegisterManagerFactory(newResourceManagerFactory()) +} diff --git a/pkg/resource/knowledge_base/references.go b/pkg/resource/knowledge_base/references.go new file mode 100644 index 0000000..88a5634 --- /dev/null +++ b/pkg/resource/knowledge_base/references.go @@ -0,0 +1,57 @@ +// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"). You may +// not use this file except in compliance with the License. A copy of the +// License is located at +// +// http://aws.amazon.com/apache2.0/ +// +// or in the "license" file accompanying this file. This file is distributed +// on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +// express or implied. See the License for the specific language governing +// permissions and limitations under the License. + +// Code generated by ack-generate. DO NOT EDIT. + +package knowledge_base + +import ( + "context" + + "sigs.k8s.io/controller-runtime/pkg/client" + + acktypes "github.com/aws-controllers-k8s/runtime/pkg/types" + + svcapitypes "github.com/aws-controllers-k8s/bedrockagent-controller/apis/v1alpha1" +) + +// ClearResolvedReferences removes any reference values that were made +// concrete in the spec. It returns a copy of the input AWSResource which +// contains the original *Ref values, but none of their respective concrete +// values. +func (rm *resourceManager) ClearResolvedReferences(res acktypes.AWSResource) acktypes.AWSResource { + ko := rm.concreteResource(res).ko.DeepCopy() + + return &resource{ko} +} + +// ResolveReferences finds if there are any Reference field(s) present +// inside AWSResource passed in the parameter and attempts to resolve those +// reference field(s) into their respective target field(s). It returns a +// copy of the input AWSResource with resolved reference(s), a boolean which +// is set to true if the resource contains any references (regardless of if +// they are resolved successfully) and an error if the passed AWSResource's +// reference field(s) could not be resolved. +func (rm *resourceManager) ResolveReferences( + ctx context.Context, + apiReader client.Reader, + res acktypes.AWSResource, +) (acktypes.AWSResource, bool, error) { + return res, false, nil +} + +// validateReferenceFields validates the reference field and corresponding +// identifier field. +func validateReferenceFields(ko *svcapitypes.KnowledgeBase) error { + return nil +} diff --git a/pkg/resource/knowledge_base/resource.go b/pkg/resource/knowledge_base/resource.go new file mode 100644 index 0000000..44d89a6 --- /dev/null +++ b/pkg/resource/knowledge_base/resource.go @@ -0,0 +1,113 @@ +// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"). You may +// not use this file except in compliance with the License. A copy of the +// License is located at +// +// http://aws.amazon.com/apache2.0/ +// +// or in the "license" file accompanying this file. This file is distributed +// on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +// express or implied. See the License for the specific language governing +// permissions and limitations under the License. + +// Code generated by ack-generate. DO NOT EDIT. + +package knowledge_base + +import ( + "fmt" + + ackv1alpha1 "github.com/aws-controllers-k8s/runtime/apis/core/v1alpha1" + ackerrors "github.com/aws-controllers-k8s/runtime/pkg/errors" + acktypes "github.com/aws-controllers-k8s/runtime/pkg/types" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + rtclient "sigs.k8s.io/controller-runtime/pkg/client" + + svcapitypes "github.com/aws-controllers-k8s/bedrockagent-controller/apis/v1alpha1" +) + +// Hack to avoid import errors during build... +var ( + _ = &ackerrors.MissingNameIdentifier +) + +// resource implements the `aws-controller-k8s/runtime/pkg/types.AWSResource` +// interface +type resource struct { + // The Kubernetes-native CR representing the resource + ko *svcapitypes.KnowledgeBase +} + +// Identifiers returns an AWSResourceIdentifiers object containing various +// identifying information, including the AWS account ID that owns the +// resource, the resource's AWS Resource Name (ARN) +func (r *resource) Identifiers() acktypes.AWSResourceIdentifiers { + return &resourceIdentifiers{r.ko.Status.ACKResourceMetadata} +} + +// IsBeingDeleted returns true if the Kubernetes resource has a non-zero +// deletion timestamp +func (r *resource) IsBeingDeleted() bool { + return !r.ko.DeletionTimestamp.IsZero() +} + +// RuntimeObject returns the Kubernetes apimachinery/runtime representation of +// the AWSResource +func (r *resource) RuntimeObject() rtclient.Object { + return r.ko +} + +// MetaObject returns the Kubernetes apimachinery/apis/meta/v1.Object +// representation of the AWSResource +func (r *resource) MetaObject() metav1.Object { + return r.ko.GetObjectMeta() +} + +// Conditions returns the ACK Conditions collection for the AWSResource +func (r *resource) Conditions() []*ackv1alpha1.Condition { + return r.ko.Status.Conditions +} + +// ReplaceConditions sets the Conditions status field for the resource +func (r *resource) ReplaceConditions(conditions []*ackv1alpha1.Condition) { + r.ko.Status.Conditions = conditions +} + +// SetObjectMeta sets the ObjectMeta field for the resource +func (r *resource) SetObjectMeta(meta metav1.ObjectMeta) { + r.ko.ObjectMeta = meta +} + +// SetStatus will set the Status field for the resource +func (r *resource) SetStatus(desired acktypes.AWSResource) { + r.ko.Status = desired.(*resource).ko.Status +} + +// SetIdentifiers sets the Spec or Status field that is referenced as the unique +// resource identifier +func (r *resource) SetIdentifiers(identifier *ackv1alpha1.AWSIdentifiers) error { + if identifier.NameOrID == "" { + return ackerrors.MissingNameIdentifier + } + r.ko.Status.KnowledgeBaseID = &identifier.NameOrID + + return nil +} + +// PopulateResourceFromAnnotation populates the fields passed from adoption annotation +func (r *resource) PopulateResourceFromAnnotation(fields map[string]string) error { + tmp, ok := fields["knowledgeBaseID"] + if !ok { + return ackerrors.NewTerminalError(fmt.Errorf("required field missing: knowledgeBaseID")) + } + r.ko.Status.KnowledgeBaseID = &tmp + + return nil +} + +// DeepCopy will return a copy of the resource +func (r *resource) DeepCopy() acktypes.AWSResource { + koCopy := r.ko.DeepCopy() + return &resource{koCopy} +} diff --git a/pkg/resource/knowledge_base/sdk.go b/pkg/resource/knowledge_base/sdk.go new file mode 100644 index 0000000..2cc2632 --- /dev/null +++ b/pkg/resource/knowledge_base/sdk.go @@ -0,0 +1,2276 @@ +// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"). You may +// not use this file except in compliance with the License. A copy of the +// License is located at +// +// http://aws.amazon.com/apache2.0/ +// +// or in the "license" file accompanying this file. This file is distributed +// on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +// express or implied. See the License for the specific language governing +// permissions and limitations under the License. + +// Code generated by ack-generate. DO NOT EDIT. + +package knowledge_base + +import ( + "context" + "errors" + "fmt" + "math" + "reflect" + "strings" + + ackv1alpha1 "github.com/aws-controllers-k8s/runtime/apis/core/v1alpha1" + ackcompare "github.com/aws-controllers-k8s/runtime/pkg/compare" + ackcondition "github.com/aws-controllers-k8s/runtime/pkg/condition" + ackerr "github.com/aws-controllers-k8s/runtime/pkg/errors" + ackrequeue "github.com/aws-controllers-k8s/runtime/pkg/requeue" + ackrtlog "github.com/aws-controllers-k8s/runtime/pkg/runtime/log" + "github.com/aws/aws-sdk-go-v2/aws" + svcsdk "github.com/aws/aws-sdk-go-v2/service/bedrockagent" + svcsdktypes "github.com/aws/aws-sdk-go-v2/service/bedrockagent/types" + smithy "github.com/aws/smithy-go" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + svcapitypes "github.com/aws-controllers-k8s/bedrockagent-controller/apis/v1alpha1" +) + +// Hack to avoid import errors during build... +var ( + _ = &metav1.Time{} + _ = strings.ToLower("") + _ = &svcsdk.Client{} + _ = &svcapitypes.KnowledgeBase{} + _ = ackv1alpha1.AWSAccountID("") + _ = &ackerr.NotFound + _ = &ackcondition.NotManagedMessage + _ = &reflect.Value{} + _ = fmt.Sprintf("") + _ = &ackrequeue.NoRequeue{} + _ = &aws.Config{} +) + +// sdkFind returns SDK-specific information about a supplied resource +func (rm *resourceManager) sdkFind( + ctx context.Context, + r *resource, +) (latest *resource, err error) { + rlog := ackrtlog.FromContext(ctx) + exit := rlog.Trace("rm.sdkFind") + defer func() { + exit(err) + }() + // If any required fields in the input shape are missing, AWS resource is + // not created yet. Return NotFound here to indicate to callers that the + // resource isn't yet created. + if rm.requiredFieldsMissingFromReadOneInput(r) { + return nil, ackerr.NotFound + } + + input, err := rm.newDescribeRequestPayload(r) + if err != nil { + return nil, err + } + + var resp *svcsdk.GetKnowledgeBaseOutput + resp, err = rm.sdkapi.GetKnowledgeBase(ctx, input) + rm.metrics.RecordAPICall("READ_ONE", "GetKnowledgeBase", err) + if err != nil { + var awsErr smithy.APIError + if errors.As(err, &awsErr) && awsErr.ErrorCode() == "ResourceNotFoundException" { + return nil, ackerr.NotFound + } + return nil, err + } + + // Merge in the information we read from the API call above to the copy of + // the original Kubernetes object we passed to the function + ko := r.ko.DeepCopy() + + if resp.KnowledgeBase.CreatedAt != nil { + ko.Status.CreatedAt = &metav1.Time{*resp.KnowledgeBase.CreatedAt} + } else { + ko.Status.CreatedAt = nil + } + if resp.KnowledgeBase.Description != nil { + ko.Spec.Description = resp.KnowledgeBase.Description + } else { + ko.Spec.Description = nil + } + if resp.KnowledgeBase.FailureReasons != nil { + ko.Status.FailureReasons = aws.StringSlice(resp.KnowledgeBase.FailureReasons) + } else { + ko.Status.FailureReasons = nil + } + if ko.Status.ACKResourceMetadata == nil { + ko.Status.ACKResourceMetadata = &ackv1alpha1.ResourceMetadata{} + } + if resp.KnowledgeBase.KnowledgeBaseArn != nil { + arn := ackv1alpha1.AWSResourceName(*resp.KnowledgeBase.KnowledgeBaseArn) + ko.Status.ACKResourceMetadata.ARN = &arn + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration != nil { + f4 := &svcapitypes.KnowledgeBaseConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration != nil { + f4f0 := &svcapitypes.KendraKnowledgeBaseConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration.KendraIndexArn != nil { + f4f0.KendraIndexARN = resp.KnowledgeBase.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration.KendraIndexArn + } + f4.KendraKnowledgeBaseConfiguration = f4f0 + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration != nil { + f4f1 := &svcapitypes.SQLKnowledgeBaseConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration != nil { + f4f1f0 := &svcapitypes.RedshiftConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration != nil { + f4f1f0f0 := &svcapitypes.RedshiftQueryEngineConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration != nil { + f4f1f0f0f0 := &svcapitypes.RedshiftProvisionedConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration != nil { + f4f1f0f0f0f0 := &svcapitypes.RedshiftProvisionedAuthConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.DatabaseUser != nil { + f4f1f0f0f0f0.DatabaseUser = resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.DatabaseUser + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.Type != "" { + f4f1f0f0f0f0.Type = aws.String(string(resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.Type)) + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.UsernamePasswordSecretArn != nil { + f4f1f0f0f0f0.UsernamePasswordSecretARN = resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.UsernamePasswordSecretArn + } + f4f1f0f0f0.AuthConfiguration = f4f1f0f0f0f0 + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.ClusterIdentifier != nil { + f4f1f0f0f0.ClusterIdentifier = resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.ClusterIdentifier + } + f4f1f0f0.ProvisionedConfiguration = f4f1f0f0f0 + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration != nil { + f4f1f0f0f1 := &svcapitypes.RedshiftServerlessConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration != nil { + f4f1f0f0f1f0 := &svcapitypes.RedshiftServerlessAuthConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.Type != "" { + f4f1f0f0f1f0.Type = aws.String(string(resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.Type)) + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.UsernamePasswordSecretArn != nil { + f4f1f0f0f1f0.UsernamePasswordSecretARN = resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.UsernamePasswordSecretArn + } + f4f1f0f0f1.AuthConfiguration = f4f1f0f0f1f0 + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.WorkgroupArn != nil { + f4f1f0f0f1.WorkgroupARN = resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.WorkgroupArn + } + f4f1f0f0.ServerlessConfiguration = f4f1f0f0f1 + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.Type != "" { + f4f1f0f0.Type = aws.String(string(resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.Type)) + } + f4f1f0.QueryEngineConfiguration = f4f1f0f0 + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration != nil { + f4f1f0f1 := &svcapitypes.QueryGenerationConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.ExecutionTimeoutSeconds != nil { + executionTimeoutSecondsCopy := int64(*resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.ExecutionTimeoutSeconds) + f4f1f0f1.ExecutionTimeoutSeconds = &executionTimeoutSecondsCopy + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext != nil { + f4f1f0f1f1 := &svcapitypes.QueryGenerationContext{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.CuratedQueries != nil { + f4f1f0f1f1f0 := []*svcapitypes.CuratedQuery{} + for _, f4f1f0f1f1f0iter := range resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.CuratedQueries { + f4f1f0f1f1f0elem := &svcapitypes.CuratedQuery{} + if f4f1f0f1f1f0iter.NaturalLanguage != nil { + f4f1f0f1f1f0elem.NATuralLanguage = f4f1f0f1f1f0iter.NaturalLanguage + } + if f4f1f0f1f1f0iter.Sql != nil { + f4f1f0f1f1f0elem.SQL = f4f1f0f1f1f0iter.Sql + } + f4f1f0f1f1f0 = append(f4f1f0f1f1f0, f4f1f0f1f1f0elem) + } + f4f1f0f1f1.CuratedQueries = f4f1f0f1f1f0 + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.Tables != nil { + f4f1f0f1f1f1 := []*svcapitypes.QueryGenerationTable{} + for _, f4f1f0f1f1f1iter := range resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.Tables { + f4f1f0f1f1f1elem := &svcapitypes.QueryGenerationTable{} + if f4f1f0f1f1f1iter.Columns != nil { + f4f1f0f1f1f1elemf0 := []*svcapitypes.QueryGenerationColumn{} + for _, f4f1f0f1f1f1elemf0iter := range f4f1f0f1f1f1iter.Columns { + f4f1f0f1f1f1elemf0elem := &svcapitypes.QueryGenerationColumn{} + if f4f1f0f1f1f1elemf0iter.Description != nil { + f4f1f0f1f1f1elemf0elem.Description = f4f1f0f1f1f1elemf0iter.Description + } + if f4f1f0f1f1f1elemf0iter.Inclusion != "" { + f4f1f0f1f1f1elemf0elem.Inclusion = aws.String(string(f4f1f0f1f1f1elemf0iter.Inclusion)) + } + if f4f1f0f1f1f1elemf0iter.Name != nil { + f4f1f0f1f1f1elemf0elem.Name = f4f1f0f1f1f1elemf0iter.Name + } + f4f1f0f1f1f1elemf0 = append(f4f1f0f1f1f1elemf0, f4f1f0f1f1f1elemf0elem) + } + f4f1f0f1f1f1elem.Columns = f4f1f0f1f1f1elemf0 + } + if f4f1f0f1f1f1iter.Description != nil { + f4f1f0f1f1f1elem.Description = f4f1f0f1f1f1iter.Description + } + if f4f1f0f1f1f1iter.Inclusion != "" { + f4f1f0f1f1f1elem.Inclusion = aws.String(string(f4f1f0f1f1f1iter.Inclusion)) + } + if f4f1f0f1f1f1iter.Name != nil { + f4f1f0f1f1f1elem.Name = f4f1f0f1f1f1iter.Name + } + f4f1f0f1f1f1 = append(f4f1f0f1f1f1, f4f1f0f1f1f1elem) + } + f4f1f0f1f1.Tables = f4f1f0f1f1f1 + } + f4f1f0f1.GenerationContext = f4f1f0f1f1 + } + f4f1f0.QueryGenerationConfiguration = f4f1f0f1 + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.StorageConfigurations != nil { + f4f1f0f2 := []*svcapitypes.RedshiftQueryEngineStorageConfiguration{} + for _, f4f1f0f2iter := range resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.StorageConfigurations { + f4f1f0f2elem := &svcapitypes.RedshiftQueryEngineStorageConfiguration{} + if f4f1f0f2iter.AwsDataCatalogConfiguration != nil { + f4f1f0f2elemf0 := &svcapitypes.RedshiftQueryEngineAWSDataCatalogStorageConfiguration{} + if f4f1f0f2iter.AwsDataCatalogConfiguration.TableNames != nil { + f4f1f0f2elemf0.TableNames = aws.StringSlice(f4f1f0f2iter.AwsDataCatalogConfiguration.TableNames) + } + f4f1f0f2elem.AWSDataCatalogConfiguration = f4f1f0f2elemf0 + } + if f4f1f0f2iter.RedshiftConfiguration != nil { + f4f1f0f2elemf1 := &svcapitypes.RedshiftQueryEngineRedshiftStorageConfiguration{} + if f4f1f0f2iter.RedshiftConfiguration.DatabaseName != nil { + f4f1f0f2elemf1.DatabaseName = f4f1f0f2iter.RedshiftConfiguration.DatabaseName + } + f4f1f0f2elem.RedshiftConfiguration = f4f1f0f2elemf1 + } + if f4f1f0f2iter.Type != "" { + f4f1f0f2elem.Type = aws.String(string(f4f1f0f2iter.Type)) + } + f4f1f0f2 = append(f4f1f0f2, f4f1f0f2elem) + } + f4f1f0.StorageConfigurations = f4f1f0f2 + } + f4f1.RedshiftConfiguration = f4f1f0 + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.Type != "" { + f4f1.Type = aws.String(string(resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.Type)) + } + f4.SQLKnowledgeBaseConfiguration = f4f1 + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.Type != "" { + f4.Type = aws.String(string(resp.KnowledgeBase.KnowledgeBaseConfiguration.Type)) + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration != nil { + f4f3 := &svcapitypes.VectorKnowledgeBaseConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelArn != nil { + f4f3.EmbeddingModelARN = resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelArn + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration != nil { + f4f3f1 := &svcapitypes.EmbeddingModelConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration != nil { + f4f3f1f0 := &svcapitypes.BedrockEmbeddingModelConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.Dimensions != nil { + dimensionsCopy := int64(*resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.Dimensions) + f4f3f1f0.Dimensions = &dimensionsCopy + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.EmbeddingDataType != "" { + f4f3f1f0.EmbeddingDataType = aws.String(string(resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.EmbeddingDataType)) + } + f4f3f1.BedrockEmbeddingModelConfiguration = f4f3f1f0 + } + f4f3.EmbeddingModelConfiguration = f4f3f1 + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.SupplementalDataStorageConfiguration != nil { + f4f3f2 := &svcapitypes.SupplementalDataStorageConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.SupplementalDataStorageConfiguration.StorageLocations != nil { + f4f3f2f0 := []*svcapitypes.SupplementalDataStorageLocation{} + for _, f4f3f2f0iter := range resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.SupplementalDataStorageConfiguration.StorageLocations { + f4f3f2f0elem := &svcapitypes.SupplementalDataStorageLocation{} + if f4f3f2f0iter.S3Location != nil { + f4f3f2f0elemf0 := &svcapitypes.S3Location{} + if f4f3f2f0iter.S3Location.Uri != nil { + f4f3f2f0elemf0.URI = f4f3f2f0iter.S3Location.Uri + } + f4f3f2f0elem.S3Location = f4f3f2f0elemf0 + } + if f4f3f2f0iter.Type != "" { + f4f3f2f0elem.Type = aws.String(string(f4f3f2f0iter.Type)) + } + f4f3f2f0 = append(f4f3f2f0, f4f3f2f0elem) + } + f4f3f2.StorageLocations = f4f3f2f0 + } + f4f3.SupplementalDataStorageConfiguration = f4f3f2 + } + f4.VectorKnowledgeBaseConfiguration = f4f3 + } + ko.Spec.KnowledgeBaseConfiguration = f4 + } else { + ko.Spec.KnowledgeBaseConfiguration = nil + } + if resp.KnowledgeBase.KnowledgeBaseId != nil { + ko.Status.KnowledgeBaseID = resp.KnowledgeBase.KnowledgeBaseId + } else { + ko.Status.KnowledgeBaseID = nil + } + if resp.KnowledgeBase.Name != nil { + ko.Spec.Name = resp.KnowledgeBase.Name + } else { + ko.Spec.Name = nil + } + if resp.KnowledgeBase.RoleArn != nil { + ko.Spec.RoleARN = resp.KnowledgeBase.RoleArn + } else { + ko.Spec.RoleARN = nil + } + if resp.KnowledgeBase.Status != "" { + ko.Status.Status = aws.String(string(resp.KnowledgeBase.Status)) + } else { + ko.Status.Status = nil + } + if resp.KnowledgeBase.StorageConfiguration != nil { + f9 := &svcapitypes.StorageConfiguration{} + if resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration != nil { + f9f0 := &svcapitypes.MongoDBAtlasConfiguration{} + if resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.CollectionName != nil { + f9f0.CollectionName = resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.CollectionName + } + if resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.CredentialsSecretArn != nil { + f9f0.CredentialsSecretARN = resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.CredentialsSecretArn + } + if resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.DatabaseName != nil { + f9f0.DatabaseName = resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.DatabaseName + } + if resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.Endpoint != nil { + f9f0.Endpoint = resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.Endpoint + } + if resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.EndpointServiceName != nil { + f9f0.EndpointServiceName = resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.EndpointServiceName + } + if resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.FieldMapping != nil { + f9f0f5 := &svcapitypes.MongoDBAtlasFieldMapping{} + if resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.FieldMapping.MetadataField != nil { + f9f0f5.MetadataField = resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.FieldMapping.MetadataField + } + if resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.FieldMapping.TextField != nil { + f9f0f5.TextField = resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.FieldMapping.TextField + } + if resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.FieldMapping.VectorField != nil { + f9f0f5.VectorField = resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.FieldMapping.VectorField + } + f9f0.FieldMapping = f9f0f5 + } + if resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.VectorIndexName != nil { + f9f0.VectorIndexName = resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.VectorIndexName + } + f9.MongoDBAtlasConfiguration = f9f0 + } + if resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration != nil { + f9f1 := &svcapitypes.OpenSearchServerlessConfiguration{} + if resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration.CollectionArn != nil { + f9f1.CollectionARN = resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration.CollectionArn + } + if resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping != nil { + f9f1f1 := &svcapitypes.OpenSearchServerlessFieldMapping{} + if resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.MetadataField != nil { + f9f1f1.MetadataField = resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.MetadataField + } + if resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.TextField != nil { + f9f1f1.TextField = resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.TextField + } + if resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.VectorField != nil { + f9f1f1.VectorField = resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.VectorField + } + f9f1.FieldMapping = f9f1f1 + } + if resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration.VectorIndexName != nil { + f9f1.VectorIndexName = resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration.VectorIndexName + } + f9.OpensearchServerlessConfiguration = f9f1 + } + if resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration != nil { + f9f2 := &svcapitypes.PineconeConfiguration{} + if resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration.ConnectionString != nil { + f9f2.ConnectionString = resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration.ConnectionString + } + if resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration.CredentialsSecretArn != nil { + f9f2.CredentialsSecretARN = resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration.CredentialsSecretArn + } + if resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration.FieldMapping != nil { + f9f2f2 := &svcapitypes.PineconeFieldMapping{} + if resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration.FieldMapping.MetadataField != nil { + f9f2f2.MetadataField = resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration.FieldMapping.MetadataField + } + if resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration.FieldMapping.TextField != nil { + f9f2f2.TextField = resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration.FieldMapping.TextField + } + f9f2.FieldMapping = f9f2f2 + } + if resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration.Namespace != nil { + f9f2.Namespace = resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration.Namespace + } + f9.PineconeConfiguration = f9f2 + } + if resp.KnowledgeBase.StorageConfiguration.RdsConfiguration != nil { + f9f3 := &svcapitypes.RdsConfiguration{} + if resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.CredentialsSecretArn != nil { + f9f3.CredentialsSecretARN = resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.CredentialsSecretArn + } + if resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.DatabaseName != nil { + f9f3.DatabaseName = resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.DatabaseName + } + if resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.FieldMapping != nil { + f9f3f2 := &svcapitypes.RdsFieldMapping{} + if resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.FieldMapping.MetadataField != nil { + f9f3f2.MetadataField = resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.FieldMapping.MetadataField + } + if resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.FieldMapping.PrimaryKeyField != nil { + f9f3f2.PrimaryKeyField = resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.FieldMapping.PrimaryKeyField + } + if resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.FieldMapping.TextField != nil { + f9f3f2.TextField = resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.FieldMapping.TextField + } + if resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.FieldMapping.VectorField != nil { + f9f3f2.VectorField = resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.FieldMapping.VectorField + } + f9f3.FieldMapping = f9f3f2 + } + if resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.ResourceArn != nil { + f9f3.ResourceARN = resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.ResourceArn + } + if resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.TableName != nil { + f9f3.TableName = resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.TableName + } + f9.RdsConfiguration = f9f3 + } + if resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration != nil { + f9f4 := &svcapitypes.RedisEnterpriseCloudConfiguration{} + if resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.CredentialsSecretArn != nil { + f9f4.CredentialsSecretARN = resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.CredentialsSecretArn + } + if resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.Endpoint != nil { + f9f4.Endpoint = resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.Endpoint + } + if resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping != nil { + f9f4f2 := &svcapitypes.RedisEnterpriseCloudFieldMapping{} + if resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.MetadataField != nil { + f9f4f2.MetadataField = resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.MetadataField + } + if resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.TextField != nil { + f9f4f2.TextField = resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.TextField + } + if resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.VectorField != nil { + f9f4f2.VectorField = resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.VectorField + } + f9f4.FieldMapping = f9f4f2 + } + if resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.VectorIndexName != nil { + f9f4.VectorIndexName = resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.VectorIndexName + } + f9.RedisEnterpriseCloudConfiguration = f9f4 + } + if resp.KnowledgeBase.StorageConfiguration.Type != "" { + f9.Type = aws.String(string(resp.KnowledgeBase.StorageConfiguration.Type)) + } + ko.Spec.StorageConfiguration = f9 + } else { + ko.Spec.StorageConfiguration = nil + } + if resp.KnowledgeBase.UpdatedAt != nil { + ko.Status.UpdatedAt = &metav1.Time{*resp.KnowledgeBase.UpdatedAt} + } else { + ko.Status.UpdatedAt = nil + } + + rm.setStatusDefaults(ko) + return &resource{ko}, nil +} + +// requiredFieldsMissingFromReadOneInput returns true if there are any fields +// for the ReadOne Input shape that are required but not present in the +// resource's Spec or Status +func (rm *resourceManager) requiredFieldsMissingFromReadOneInput( + r *resource, +) bool { + return r.ko.Status.KnowledgeBaseID == nil + +} + +// newDescribeRequestPayload returns SDK-specific struct for the HTTP request +// payload of the Describe API call for the resource +func (rm *resourceManager) newDescribeRequestPayload( + r *resource, +) (*svcsdk.GetKnowledgeBaseInput, error) { + res := &svcsdk.GetKnowledgeBaseInput{} + + if r.ko.Status.KnowledgeBaseID != nil { + res.KnowledgeBaseId = r.ko.Status.KnowledgeBaseID + } + + return res, nil +} + +// sdkCreate creates the supplied resource in the backend AWS service API and +// returns a copy of the resource with resource fields (in both Spec and +// Status) filled in with values from the CREATE API operation's Output shape. +func (rm *resourceManager) sdkCreate( + ctx context.Context, + desired *resource, +) (created *resource, err error) { + rlog := ackrtlog.FromContext(ctx) + exit := rlog.Trace("rm.sdkCreate") + defer func() { + exit(err) + }() + input, err := rm.newCreateRequestPayload(ctx, desired) + if err != nil { + return nil, err + } + + var resp *svcsdk.CreateKnowledgeBaseOutput + _ = resp + resp, err = rm.sdkapi.CreateKnowledgeBase(ctx, input) + rm.metrics.RecordAPICall("CREATE", "CreateKnowledgeBase", err) + if err != nil { + return nil, err + } + // Merge in the information we read from the API call above to the copy of + // the original Kubernetes object we passed to the function + ko := desired.ko.DeepCopy() + + if resp.KnowledgeBase.CreatedAt != nil { + ko.Status.CreatedAt = &metav1.Time{*resp.KnowledgeBase.CreatedAt} + } else { + ko.Status.CreatedAt = nil + } + if resp.KnowledgeBase.Description != nil { + ko.Spec.Description = resp.KnowledgeBase.Description + } else { + ko.Spec.Description = nil + } + if resp.KnowledgeBase.FailureReasons != nil { + ko.Status.FailureReasons = aws.StringSlice(resp.KnowledgeBase.FailureReasons) + } else { + ko.Status.FailureReasons = nil + } + if ko.Status.ACKResourceMetadata == nil { + ko.Status.ACKResourceMetadata = &ackv1alpha1.ResourceMetadata{} + } + if resp.KnowledgeBase.KnowledgeBaseArn != nil { + arn := ackv1alpha1.AWSResourceName(*resp.KnowledgeBase.KnowledgeBaseArn) + ko.Status.ACKResourceMetadata.ARN = &arn + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration != nil { + f4 := &svcapitypes.KnowledgeBaseConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration != nil { + f4f0 := &svcapitypes.KendraKnowledgeBaseConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration.KendraIndexArn != nil { + f4f0.KendraIndexARN = resp.KnowledgeBase.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration.KendraIndexArn + } + f4.KendraKnowledgeBaseConfiguration = f4f0 + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration != nil { + f4f1 := &svcapitypes.SQLKnowledgeBaseConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration != nil { + f4f1f0 := &svcapitypes.RedshiftConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration != nil { + f4f1f0f0 := &svcapitypes.RedshiftQueryEngineConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration != nil { + f4f1f0f0f0 := &svcapitypes.RedshiftProvisionedConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration != nil { + f4f1f0f0f0f0 := &svcapitypes.RedshiftProvisionedAuthConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.DatabaseUser != nil { + f4f1f0f0f0f0.DatabaseUser = resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.DatabaseUser + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.Type != "" { + f4f1f0f0f0f0.Type = aws.String(string(resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.Type)) + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.UsernamePasswordSecretArn != nil { + f4f1f0f0f0f0.UsernamePasswordSecretARN = resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.UsernamePasswordSecretArn + } + f4f1f0f0f0.AuthConfiguration = f4f1f0f0f0f0 + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.ClusterIdentifier != nil { + f4f1f0f0f0.ClusterIdentifier = resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.ClusterIdentifier + } + f4f1f0f0.ProvisionedConfiguration = f4f1f0f0f0 + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration != nil { + f4f1f0f0f1 := &svcapitypes.RedshiftServerlessConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration != nil { + f4f1f0f0f1f0 := &svcapitypes.RedshiftServerlessAuthConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.Type != "" { + f4f1f0f0f1f0.Type = aws.String(string(resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.Type)) + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.UsernamePasswordSecretArn != nil { + f4f1f0f0f1f0.UsernamePasswordSecretARN = resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.UsernamePasswordSecretArn + } + f4f1f0f0f1.AuthConfiguration = f4f1f0f0f1f0 + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.WorkgroupArn != nil { + f4f1f0f0f1.WorkgroupARN = resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.WorkgroupArn + } + f4f1f0f0.ServerlessConfiguration = f4f1f0f0f1 + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.Type != "" { + f4f1f0f0.Type = aws.String(string(resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.Type)) + } + f4f1f0.QueryEngineConfiguration = f4f1f0f0 + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration != nil { + f4f1f0f1 := &svcapitypes.QueryGenerationConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.ExecutionTimeoutSeconds != nil { + executionTimeoutSecondsCopy := int64(*resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.ExecutionTimeoutSeconds) + f4f1f0f1.ExecutionTimeoutSeconds = &executionTimeoutSecondsCopy + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext != nil { + f4f1f0f1f1 := &svcapitypes.QueryGenerationContext{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.CuratedQueries != nil { + f4f1f0f1f1f0 := []*svcapitypes.CuratedQuery{} + for _, f4f1f0f1f1f0iter := range resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.CuratedQueries { + f4f1f0f1f1f0elem := &svcapitypes.CuratedQuery{} + if f4f1f0f1f1f0iter.NaturalLanguage != nil { + f4f1f0f1f1f0elem.NATuralLanguage = f4f1f0f1f1f0iter.NaturalLanguage + } + if f4f1f0f1f1f0iter.Sql != nil { + f4f1f0f1f1f0elem.SQL = f4f1f0f1f1f0iter.Sql + } + f4f1f0f1f1f0 = append(f4f1f0f1f1f0, f4f1f0f1f1f0elem) + } + f4f1f0f1f1.CuratedQueries = f4f1f0f1f1f0 + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.Tables != nil { + f4f1f0f1f1f1 := []*svcapitypes.QueryGenerationTable{} + for _, f4f1f0f1f1f1iter := range resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.Tables { + f4f1f0f1f1f1elem := &svcapitypes.QueryGenerationTable{} + if f4f1f0f1f1f1iter.Columns != nil { + f4f1f0f1f1f1elemf0 := []*svcapitypes.QueryGenerationColumn{} + for _, f4f1f0f1f1f1elemf0iter := range f4f1f0f1f1f1iter.Columns { + f4f1f0f1f1f1elemf0elem := &svcapitypes.QueryGenerationColumn{} + if f4f1f0f1f1f1elemf0iter.Description != nil { + f4f1f0f1f1f1elemf0elem.Description = f4f1f0f1f1f1elemf0iter.Description + } + if f4f1f0f1f1f1elemf0iter.Inclusion != "" { + f4f1f0f1f1f1elemf0elem.Inclusion = aws.String(string(f4f1f0f1f1f1elemf0iter.Inclusion)) + } + if f4f1f0f1f1f1elemf0iter.Name != nil { + f4f1f0f1f1f1elemf0elem.Name = f4f1f0f1f1f1elemf0iter.Name + } + f4f1f0f1f1f1elemf0 = append(f4f1f0f1f1f1elemf0, f4f1f0f1f1f1elemf0elem) + } + f4f1f0f1f1f1elem.Columns = f4f1f0f1f1f1elemf0 + } + if f4f1f0f1f1f1iter.Description != nil { + f4f1f0f1f1f1elem.Description = f4f1f0f1f1f1iter.Description + } + if f4f1f0f1f1f1iter.Inclusion != "" { + f4f1f0f1f1f1elem.Inclusion = aws.String(string(f4f1f0f1f1f1iter.Inclusion)) + } + if f4f1f0f1f1f1iter.Name != nil { + f4f1f0f1f1f1elem.Name = f4f1f0f1f1f1iter.Name + } + f4f1f0f1f1f1 = append(f4f1f0f1f1f1, f4f1f0f1f1f1elem) + } + f4f1f0f1f1.Tables = f4f1f0f1f1f1 + } + f4f1f0f1.GenerationContext = f4f1f0f1f1 + } + f4f1f0.QueryGenerationConfiguration = f4f1f0f1 + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.StorageConfigurations != nil { + f4f1f0f2 := []*svcapitypes.RedshiftQueryEngineStorageConfiguration{} + for _, f4f1f0f2iter := range resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.StorageConfigurations { + f4f1f0f2elem := &svcapitypes.RedshiftQueryEngineStorageConfiguration{} + if f4f1f0f2iter.AwsDataCatalogConfiguration != nil { + f4f1f0f2elemf0 := &svcapitypes.RedshiftQueryEngineAWSDataCatalogStorageConfiguration{} + if f4f1f0f2iter.AwsDataCatalogConfiguration.TableNames != nil { + f4f1f0f2elemf0.TableNames = aws.StringSlice(f4f1f0f2iter.AwsDataCatalogConfiguration.TableNames) + } + f4f1f0f2elem.AWSDataCatalogConfiguration = f4f1f0f2elemf0 + } + if f4f1f0f2iter.RedshiftConfiguration != nil { + f4f1f0f2elemf1 := &svcapitypes.RedshiftQueryEngineRedshiftStorageConfiguration{} + if f4f1f0f2iter.RedshiftConfiguration.DatabaseName != nil { + f4f1f0f2elemf1.DatabaseName = f4f1f0f2iter.RedshiftConfiguration.DatabaseName + } + f4f1f0f2elem.RedshiftConfiguration = f4f1f0f2elemf1 + } + if f4f1f0f2iter.Type != "" { + f4f1f0f2elem.Type = aws.String(string(f4f1f0f2iter.Type)) + } + f4f1f0f2 = append(f4f1f0f2, f4f1f0f2elem) + } + f4f1f0.StorageConfigurations = f4f1f0f2 + } + f4f1.RedshiftConfiguration = f4f1f0 + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.Type != "" { + f4f1.Type = aws.String(string(resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.Type)) + } + f4.SQLKnowledgeBaseConfiguration = f4f1 + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.Type != "" { + f4.Type = aws.String(string(resp.KnowledgeBase.KnowledgeBaseConfiguration.Type)) + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration != nil { + f4f3 := &svcapitypes.VectorKnowledgeBaseConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelArn != nil { + f4f3.EmbeddingModelARN = resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelArn + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration != nil { + f4f3f1 := &svcapitypes.EmbeddingModelConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration != nil { + f4f3f1f0 := &svcapitypes.BedrockEmbeddingModelConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.Dimensions != nil { + dimensionsCopy := int64(*resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.Dimensions) + f4f3f1f0.Dimensions = &dimensionsCopy + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.EmbeddingDataType != "" { + f4f3f1f0.EmbeddingDataType = aws.String(string(resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.EmbeddingDataType)) + } + f4f3f1.BedrockEmbeddingModelConfiguration = f4f3f1f0 + } + f4f3.EmbeddingModelConfiguration = f4f3f1 + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.SupplementalDataStorageConfiguration != nil { + f4f3f2 := &svcapitypes.SupplementalDataStorageConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.SupplementalDataStorageConfiguration.StorageLocations != nil { + f4f3f2f0 := []*svcapitypes.SupplementalDataStorageLocation{} + for _, f4f3f2f0iter := range resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.SupplementalDataStorageConfiguration.StorageLocations { + f4f3f2f0elem := &svcapitypes.SupplementalDataStorageLocation{} + if f4f3f2f0iter.S3Location != nil { + f4f3f2f0elemf0 := &svcapitypes.S3Location{} + if f4f3f2f0iter.S3Location.Uri != nil { + f4f3f2f0elemf0.URI = f4f3f2f0iter.S3Location.Uri + } + f4f3f2f0elem.S3Location = f4f3f2f0elemf0 + } + if f4f3f2f0iter.Type != "" { + f4f3f2f0elem.Type = aws.String(string(f4f3f2f0iter.Type)) + } + f4f3f2f0 = append(f4f3f2f0, f4f3f2f0elem) + } + f4f3f2.StorageLocations = f4f3f2f0 + } + f4f3.SupplementalDataStorageConfiguration = f4f3f2 + } + f4.VectorKnowledgeBaseConfiguration = f4f3 + } + ko.Spec.KnowledgeBaseConfiguration = f4 + } else { + ko.Spec.KnowledgeBaseConfiguration = nil + } + if resp.KnowledgeBase.KnowledgeBaseId != nil { + ko.Status.KnowledgeBaseID = resp.KnowledgeBase.KnowledgeBaseId + } else { + ko.Status.KnowledgeBaseID = nil + } + if resp.KnowledgeBase.Name != nil { + ko.Spec.Name = resp.KnowledgeBase.Name + } else { + ko.Spec.Name = nil + } + if resp.KnowledgeBase.RoleArn != nil { + ko.Spec.RoleARN = resp.KnowledgeBase.RoleArn + } else { + ko.Spec.RoleARN = nil + } + if resp.KnowledgeBase.Status != "" { + ko.Status.Status = aws.String(string(resp.KnowledgeBase.Status)) + } else { + ko.Status.Status = nil + } + if resp.KnowledgeBase.StorageConfiguration != nil { + f9 := &svcapitypes.StorageConfiguration{} + if resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration != nil { + f9f0 := &svcapitypes.MongoDBAtlasConfiguration{} + if resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.CollectionName != nil { + f9f0.CollectionName = resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.CollectionName + } + if resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.CredentialsSecretArn != nil { + f9f0.CredentialsSecretARN = resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.CredentialsSecretArn + } + if resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.DatabaseName != nil { + f9f0.DatabaseName = resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.DatabaseName + } + if resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.Endpoint != nil { + f9f0.Endpoint = resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.Endpoint + } + if resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.EndpointServiceName != nil { + f9f0.EndpointServiceName = resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.EndpointServiceName + } + if resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.FieldMapping != nil { + f9f0f5 := &svcapitypes.MongoDBAtlasFieldMapping{} + if resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.FieldMapping.MetadataField != nil { + f9f0f5.MetadataField = resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.FieldMapping.MetadataField + } + if resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.FieldMapping.TextField != nil { + f9f0f5.TextField = resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.FieldMapping.TextField + } + if resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.FieldMapping.VectorField != nil { + f9f0f5.VectorField = resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.FieldMapping.VectorField + } + f9f0.FieldMapping = f9f0f5 + } + if resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.VectorIndexName != nil { + f9f0.VectorIndexName = resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.VectorIndexName + } + f9.MongoDBAtlasConfiguration = f9f0 + } + if resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration != nil { + f9f1 := &svcapitypes.OpenSearchServerlessConfiguration{} + if resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration.CollectionArn != nil { + f9f1.CollectionARN = resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration.CollectionArn + } + if resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping != nil { + f9f1f1 := &svcapitypes.OpenSearchServerlessFieldMapping{} + if resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.MetadataField != nil { + f9f1f1.MetadataField = resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.MetadataField + } + if resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.TextField != nil { + f9f1f1.TextField = resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.TextField + } + if resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.VectorField != nil { + f9f1f1.VectorField = resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.VectorField + } + f9f1.FieldMapping = f9f1f1 + } + if resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration.VectorIndexName != nil { + f9f1.VectorIndexName = resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration.VectorIndexName + } + f9.OpensearchServerlessConfiguration = f9f1 + } + if resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration != nil { + f9f2 := &svcapitypes.PineconeConfiguration{} + if resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration.ConnectionString != nil { + f9f2.ConnectionString = resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration.ConnectionString + } + if resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration.CredentialsSecretArn != nil { + f9f2.CredentialsSecretARN = resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration.CredentialsSecretArn + } + if resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration.FieldMapping != nil { + f9f2f2 := &svcapitypes.PineconeFieldMapping{} + if resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration.FieldMapping.MetadataField != nil { + f9f2f2.MetadataField = resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration.FieldMapping.MetadataField + } + if resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration.FieldMapping.TextField != nil { + f9f2f2.TextField = resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration.FieldMapping.TextField + } + f9f2.FieldMapping = f9f2f2 + } + if resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration.Namespace != nil { + f9f2.Namespace = resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration.Namespace + } + f9.PineconeConfiguration = f9f2 + } + if resp.KnowledgeBase.StorageConfiguration.RdsConfiguration != nil { + f9f3 := &svcapitypes.RdsConfiguration{} + if resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.CredentialsSecretArn != nil { + f9f3.CredentialsSecretARN = resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.CredentialsSecretArn + } + if resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.DatabaseName != nil { + f9f3.DatabaseName = resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.DatabaseName + } + if resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.FieldMapping != nil { + f9f3f2 := &svcapitypes.RdsFieldMapping{} + if resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.FieldMapping.MetadataField != nil { + f9f3f2.MetadataField = resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.FieldMapping.MetadataField + } + if resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.FieldMapping.PrimaryKeyField != nil { + f9f3f2.PrimaryKeyField = resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.FieldMapping.PrimaryKeyField + } + if resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.FieldMapping.TextField != nil { + f9f3f2.TextField = resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.FieldMapping.TextField + } + if resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.FieldMapping.VectorField != nil { + f9f3f2.VectorField = resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.FieldMapping.VectorField + } + f9f3.FieldMapping = f9f3f2 + } + if resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.ResourceArn != nil { + f9f3.ResourceARN = resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.ResourceArn + } + if resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.TableName != nil { + f9f3.TableName = resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.TableName + } + f9.RdsConfiguration = f9f3 + } + if resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration != nil { + f9f4 := &svcapitypes.RedisEnterpriseCloudConfiguration{} + if resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.CredentialsSecretArn != nil { + f9f4.CredentialsSecretARN = resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.CredentialsSecretArn + } + if resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.Endpoint != nil { + f9f4.Endpoint = resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.Endpoint + } + if resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping != nil { + f9f4f2 := &svcapitypes.RedisEnterpriseCloudFieldMapping{} + if resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.MetadataField != nil { + f9f4f2.MetadataField = resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.MetadataField + } + if resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.TextField != nil { + f9f4f2.TextField = resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.TextField + } + if resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.VectorField != nil { + f9f4f2.VectorField = resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.VectorField + } + f9f4.FieldMapping = f9f4f2 + } + if resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.VectorIndexName != nil { + f9f4.VectorIndexName = resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.VectorIndexName + } + f9.RedisEnterpriseCloudConfiguration = f9f4 + } + if resp.KnowledgeBase.StorageConfiguration.Type != "" { + f9.Type = aws.String(string(resp.KnowledgeBase.StorageConfiguration.Type)) + } + ko.Spec.StorageConfiguration = f9 + } else { + ko.Spec.StorageConfiguration = nil + } + if resp.KnowledgeBase.UpdatedAt != nil { + ko.Status.UpdatedAt = &metav1.Time{*resp.KnowledgeBase.UpdatedAt} + } else { + ko.Status.UpdatedAt = nil + } + + rm.setStatusDefaults(ko) + return &resource{ko}, nil +} + +// newCreateRequestPayload returns an SDK-specific struct for the HTTP request +// payload of the Create API call for the resource +func (rm *resourceManager) newCreateRequestPayload( + ctx context.Context, + r *resource, +) (*svcsdk.CreateKnowledgeBaseInput, error) { + res := &svcsdk.CreateKnowledgeBaseInput{} + + if r.ko.Spec.Description != nil { + res.Description = r.ko.Spec.Description + } + if r.ko.Spec.KnowledgeBaseConfiguration != nil { + f1 := &svcsdktypes.KnowledgeBaseConfiguration{} + if r.ko.Spec.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration != nil { + f1f0 := &svcsdktypes.KendraKnowledgeBaseConfiguration{} + if r.ko.Spec.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration.KendraIndexARN != nil { + f1f0.KendraIndexArn = r.ko.Spec.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration.KendraIndexARN + } + f1.KendraKnowledgeBaseConfiguration = f1f0 + } + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration != nil { + f1f1 := &svcsdktypes.SqlKnowledgeBaseConfiguration{} + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration != nil { + f1f1f0 := &svcsdktypes.RedshiftConfiguration{} + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration != nil { + f1f1f0f0 := &svcsdktypes.RedshiftQueryEngineConfiguration{} + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration != nil { + f1f1f0f0f0 := &svcsdktypes.RedshiftProvisionedConfiguration{} + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration != nil { + f1f1f0f0f0f0 := &svcsdktypes.RedshiftProvisionedAuthConfiguration{} + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.DatabaseUser != nil { + f1f1f0f0f0f0.DatabaseUser = r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.DatabaseUser + } + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.Type != nil { + f1f1f0f0f0f0.Type = svcsdktypes.RedshiftProvisionedAuthType(*r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.Type) + } + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.UsernamePasswordSecretARN != nil { + f1f1f0f0f0f0.UsernamePasswordSecretArn = r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.UsernamePasswordSecretARN + } + f1f1f0f0f0.AuthConfiguration = f1f1f0f0f0f0 + } + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.ClusterIdentifier != nil { + f1f1f0f0f0.ClusterIdentifier = r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.ClusterIdentifier + } + f1f1f0f0.ProvisionedConfiguration = f1f1f0f0f0 + } + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration != nil { + f1f1f0f0f1 := &svcsdktypes.RedshiftServerlessConfiguration{} + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration != nil { + f1f1f0f0f1f0 := &svcsdktypes.RedshiftServerlessAuthConfiguration{} + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.Type != nil { + f1f1f0f0f1f0.Type = svcsdktypes.RedshiftServerlessAuthType(*r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.Type) + } + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.UsernamePasswordSecretARN != nil { + f1f1f0f0f1f0.UsernamePasswordSecretArn = r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.UsernamePasswordSecretARN + } + f1f1f0f0f1.AuthConfiguration = f1f1f0f0f1f0 + } + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.WorkgroupARN != nil { + f1f1f0f0f1.WorkgroupArn = r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.WorkgroupARN + } + f1f1f0f0.ServerlessConfiguration = f1f1f0f0f1 + } + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.Type != nil { + f1f1f0f0.Type = svcsdktypes.RedshiftQueryEngineType(*r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.Type) + } + f1f1f0.QueryEngineConfiguration = f1f1f0f0 + } + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration != nil { + f1f1f0f1 := &svcsdktypes.QueryGenerationConfiguration{} + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.ExecutionTimeoutSeconds != nil { + executionTimeoutSecondsCopy0 := *r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.ExecutionTimeoutSeconds + if executionTimeoutSecondsCopy0 > math.MaxInt32 || executionTimeoutSecondsCopy0 < math.MinInt32 { + return nil, fmt.Errorf("error: field executionTimeoutSeconds is of type int32") + } + executionTimeoutSecondsCopy := int32(executionTimeoutSecondsCopy0) + f1f1f0f1.ExecutionTimeoutSeconds = &executionTimeoutSecondsCopy + } + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext != nil { + f1f1f0f1f1 := &svcsdktypes.QueryGenerationContext{} + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.CuratedQueries != nil { + f1f1f0f1f1f0 := []svcsdktypes.CuratedQuery{} + for _, f1f1f0f1f1f0iter := range r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.CuratedQueries { + f1f1f0f1f1f0elem := &svcsdktypes.CuratedQuery{} + if f1f1f0f1f1f0iter.NATuralLanguage != nil { + f1f1f0f1f1f0elem.NaturalLanguage = f1f1f0f1f1f0iter.NATuralLanguage + } + if f1f1f0f1f1f0iter.SQL != nil { + f1f1f0f1f1f0elem.Sql = f1f1f0f1f1f0iter.SQL + } + f1f1f0f1f1f0 = append(f1f1f0f1f1f0, *f1f1f0f1f1f0elem) + } + f1f1f0f1f1.CuratedQueries = f1f1f0f1f1f0 + } + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.Tables != nil { + f1f1f0f1f1f1 := []svcsdktypes.QueryGenerationTable{} + for _, f1f1f0f1f1f1iter := range r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.Tables { + f1f1f0f1f1f1elem := &svcsdktypes.QueryGenerationTable{} + if f1f1f0f1f1f1iter.Columns != nil { + f1f1f0f1f1f1elemf0 := []svcsdktypes.QueryGenerationColumn{} + for _, f1f1f0f1f1f1elemf0iter := range f1f1f0f1f1f1iter.Columns { + f1f1f0f1f1f1elemf0elem := &svcsdktypes.QueryGenerationColumn{} + if f1f1f0f1f1f1elemf0iter.Description != nil { + f1f1f0f1f1f1elemf0elem.Description = f1f1f0f1f1f1elemf0iter.Description + } + if f1f1f0f1f1f1elemf0iter.Inclusion != nil { + f1f1f0f1f1f1elemf0elem.Inclusion = svcsdktypes.IncludeExclude(*f1f1f0f1f1f1elemf0iter.Inclusion) + } + if f1f1f0f1f1f1elemf0iter.Name != nil { + f1f1f0f1f1f1elemf0elem.Name = f1f1f0f1f1f1elemf0iter.Name + } + f1f1f0f1f1f1elemf0 = append(f1f1f0f1f1f1elemf0, *f1f1f0f1f1f1elemf0elem) + } + f1f1f0f1f1f1elem.Columns = f1f1f0f1f1f1elemf0 + } + if f1f1f0f1f1f1iter.Description != nil { + f1f1f0f1f1f1elem.Description = f1f1f0f1f1f1iter.Description + } + if f1f1f0f1f1f1iter.Inclusion != nil { + f1f1f0f1f1f1elem.Inclusion = svcsdktypes.IncludeExclude(*f1f1f0f1f1f1iter.Inclusion) + } + if f1f1f0f1f1f1iter.Name != nil { + f1f1f0f1f1f1elem.Name = f1f1f0f1f1f1iter.Name + } + f1f1f0f1f1f1 = append(f1f1f0f1f1f1, *f1f1f0f1f1f1elem) + } + f1f1f0f1f1.Tables = f1f1f0f1f1f1 + } + f1f1f0f1.GenerationContext = f1f1f0f1f1 + } + f1f1f0.QueryGenerationConfiguration = f1f1f0f1 + } + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.StorageConfigurations != nil { + f1f1f0f2 := []svcsdktypes.RedshiftQueryEngineStorageConfiguration{} + for _, f1f1f0f2iter := range r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.StorageConfigurations { + f1f1f0f2elem := &svcsdktypes.RedshiftQueryEngineStorageConfiguration{} + if f1f1f0f2iter.AWSDataCatalogConfiguration != nil { + f1f1f0f2elemf0 := &svcsdktypes.RedshiftQueryEngineAwsDataCatalogStorageConfiguration{} + if f1f1f0f2iter.AWSDataCatalogConfiguration.TableNames != nil { + f1f1f0f2elemf0.TableNames = aws.ToStringSlice(f1f1f0f2iter.AWSDataCatalogConfiguration.TableNames) + } + f1f1f0f2elem.AwsDataCatalogConfiguration = f1f1f0f2elemf0 + } + if f1f1f0f2iter.RedshiftConfiguration != nil { + f1f1f0f2elemf1 := &svcsdktypes.RedshiftQueryEngineRedshiftStorageConfiguration{} + if f1f1f0f2iter.RedshiftConfiguration.DatabaseName != nil { + f1f1f0f2elemf1.DatabaseName = f1f1f0f2iter.RedshiftConfiguration.DatabaseName + } + f1f1f0f2elem.RedshiftConfiguration = f1f1f0f2elemf1 + } + if f1f1f0f2iter.Type != nil { + f1f1f0f2elem.Type = svcsdktypes.RedshiftQueryEngineStorageType(*f1f1f0f2iter.Type) + } + f1f1f0f2 = append(f1f1f0f2, *f1f1f0f2elem) + } + f1f1f0.StorageConfigurations = f1f1f0f2 + } + f1f1.RedshiftConfiguration = f1f1f0 + } + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.Type != nil { + f1f1.Type = svcsdktypes.QueryEngineType(*r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.Type) + } + f1.SqlKnowledgeBaseConfiguration = f1f1 + } + if r.ko.Spec.KnowledgeBaseConfiguration.Type != nil { + f1.Type = svcsdktypes.KnowledgeBaseType(*r.ko.Spec.KnowledgeBaseConfiguration.Type) + } + if r.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration != nil { + f1f3 := &svcsdktypes.VectorKnowledgeBaseConfiguration{} + if r.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelARN != nil { + f1f3.EmbeddingModelArn = r.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelARN + } + if r.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration != nil { + f1f3f1 := &svcsdktypes.EmbeddingModelConfiguration{} + if r.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration != nil { + f1f3f1f0 := &svcsdktypes.BedrockEmbeddingModelConfiguration{} + if r.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.Dimensions != nil { + dimensionsCopy0 := *r.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.Dimensions + if dimensionsCopy0 > math.MaxInt32 || dimensionsCopy0 < math.MinInt32 { + return nil, fmt.Errorf("error: field dimensions is of type int32") + } + dimensionsCopy := int32(dimensionsCopy0) + f1f3f1f0.Dimensions = &dimensionsCopy + } + if r.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.EmbeddingDataType != nil { + f1f3f1f0.EmbeddingDataType = svcsdktypes.EmbeddingDataType(*r.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.EmbeddingDataType) + } + f1f3f1.BedrockEmbeddingModelConfiguration = f1f3f1f0 + } + f1f3.EmbeddingModelConfiguration = f1f3f1 + } + if r.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.SupplementalDataStorageConfiguration != nil { + f1f3f2 := &svcsdktypes.SupplementalDataStorageConfiguration{} + if r.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.SupplementalDataStorageConfiguration.StorageLocations != nil { + f1f3f2f0 := []svcsdktypes.SupplementalDataStorageLocation{} + for _, f1f3f2f0iter := range r.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.SupplementalDataStorageConfiguration.StorageLocations { + f1f3f2f0elem := &svcsdktypes.SupplementalDataStorageLocation{} + if f1f3f2f0iter.S3Location != nil { + f1f3f2f0elemf0 := &svcsdktypes.S3Location{} + if f1f3f2f0iter.S3Location.URI != nil { + f1f3f2f0elemf0.Uri = f1f3f2f0iter.S3Location.URI + } + f1f3f2f0elem.S3Location = f1f3f2f0elemf0 + } + if f1f3f2f0iter.Type != nil { + f1f3f2f0elem.Type = svcsdktypes.SupplementalDataStorageLocationType(*f1f3f2f0iter.Type) + } + f1f3f2f0 = append(f1f3f2f0, *f1f3f2f0elem) + } + f1f3f2.StorageLocations = f1f3f2f0 + } + f1f3.SupplementalDataStorageConfiguration = f1f3f2 + } + f1.VectorKnowledgeBaseConfiguration = f1f3 + } + res.KnowledgeBaseConfiguration = f1 + } + if r.ko.Spec.Name != nil { + res.Name = r.ko.Spec.Name + } + if r.ko.Spec.RoleARN != nil { + res.RoleArn = r.ko.Spec.RoleARN + } + if r.ko.Spec.StorageConfiguration != nil { + f4 := &svcsdktypes.StorageConfiguration{} + if r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration != nil { + f4f0 := &svcsdktypes.MongoDbAtlasConfiguration{} + if r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.CollectionName != nil { + f4f0.CollectionName = r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.CollectionName + } + if r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.CredentialsSecretARN != nil { + f4f0.CredentialsSecretArn = r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.CredentialsSecretARN + } + if r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.DatabaseName != nil { + f4f0.DatabaseName = r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.DatabaseName + } + if r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.Endpoint != nil { + f4f0.Endpoint = r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.Endpoint + } + if r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.EndpointServiceName != nil { + f4f0.EndpointServiceName = r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.EndpointServiceName + } + if r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping != nil { + f4f0f5 := &svcsdktypes.MongoDbAtlasFieldMapping{} + if r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.MetadataField != nil { + f4f0f5.MetadataField = r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.MetadataField + } + if r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.TextField != nil { + f4f0f5.TextField = r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.TextField + } + if r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.VectorField != nil { + f4f0f5.VectorField = r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.VectorField + } + f4f0.FieldMapping = f4f0f5 + } + if r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.VectorIndexName != nil { + f4f0.VectorIndexName = r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.VectorIndexName + } + f4.MongoDbAtlasConfiguration = f4f0 + } + if r.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration != nil { + f4f1 := &svcsdktypes.OpenSearchServerlessConfiguration{} + if r.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.CollectionARN != nil { + f4f1.CollectionArn = r.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.CollectionARN + } + if r.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping != nil { + f4f1f1 := &svcsdktypes.OpenSearchServerlessFieldMapping{} + if r.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.MetadataField != nil { + f4f1f1.MetadataField = r.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.MetadataField + } + if r.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.TextField != nil { + f4f1f1.TextField = r.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.TextField + } + if r.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.VectorField != nil { + f4f1f1.VectorField = r.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.VectorField + } + f4f1.FieldMapping = f4f1f1 + } + if r.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.VectorIndexName != nil { + f4f1.VectorIndexName = r.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.VectorIndexName + } + f4.OpensearchServerlessConfiguration = f4f1 + } + if r.ko.Spec.StorageConfiguration.PineconeConfiguration != nil { + f4f2 := &svcsdktypes.PineconeConfiguration{} + if r.ko.Spec.StorageConfiguration.PineconeConfiguration.ConnectionString != nil { + f4f2.ConnectionString = r.ko.Spec.StorageConfiguration.PineconeConfiguration.ConnectionString + } + if r.ko.Spec.StorageConfiguration.PineconeConfiguration.CredentialsSecretARN != nil { + f4f2.CredentialsSecretArn = r.ko.Spec.StorageConfiguration.PineconeConfiguration.CredentialsSecretARN + } + if r.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping != nil { + f4f2f2 := &svcsdktypes.PineconeFieldMapping{} + if r.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping.MetadataField != nil { + f4f2f2.MetadataField = r.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping.MetadataField + } + if r.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping.TextField != nil { + f4f2f2.TextField = r.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping.TextField + } + f4f2.FieldMapping = f4f2f2 + } + if r.ko.Spec.StorageConfiguration.PineconeConfiguration.Namespace != nil { + f4f2.Namespace = r.ko.Spec.StorageConfiguration.PineconeConfiguration.Namespace + } + f4.PineconeConfiguration = f4f2 + } + if r.ko.Spec.StorageConfiguration.RdsConfiguration != nil { + f4f3 := &svcsdktypes.RdsConfiguration{} + if r.ko.Spec.StorageConfiguration.RdsConfiguration.CredentialsSecretARN != nil { + f4f3.CredentialsSecretArn = r.ko.Spec.StorageConfiguration.RdsConfiguration.CredentialsSecretARN + } + if r.ko.Spec.StorageConfiguration.RdsConfiguration.DatabaseName != nil { + f4f3.DatabaseName = r.ko.Spec.StorageConfiguration.RdsConfiguration.DatabaseName + } + if r.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping != nil { + f4f3f2 := &svcsdktypes.RdsFieldMapping{} + if r.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.MetadataField != nil { + f4f3f2.MetadataField = r.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.MetadataField + } + if r.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.PrimaryKeyField != nil { + f4f3f2.PrimaryKeyField = r.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.PrimaryKeyField + } + if r.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.TextField != nil { + f4f3f2.TextField = r.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.TextField + } + if r.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.VectorField != nil { + f4f3f2.VectorField = r.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.VectorField + } + f4f3.FieldMapping = f4f3f2 + } + if r.ko.Spec.StorageConfiguration.RdsConfiguration.ResourceARN != nil { + f4f3.ResourceArn = r.ko.Spec.StorageConfiguration.RdsConfiguration.ResourceARN + } + if r.ko.Spec.StorageConfiguration.RdsConfiguration.TableName != nil { + f4f3.TableName = r.ko.Spec.StorageConfiguration.RdsConfiguration.TableName + } + f4.RdsConfiguration = f4f3 + } + if r.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration != nil { + f4f4 := &svcsdktypes.RedisEnterpriseCloudConfiguration{} + if r.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.CredentialsSecretARN != nil { + f4f4.CredentialsSecretArn = r.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.CredentialsSecretARN + } + if r.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.Endpoint != nil { + f4f4.Endpoint = r.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.Endpoint + } + if r.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping != nil { + f4f4f2 := &svcsdktypes.RedisEnterpriseCloudFieldMapping{} + if r.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.MetadataField != nil { + f4f4f2.MetadataField = r.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.MetadataField + } + if r.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.TextField != nil { + f4f4f2.TextField = r.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.TextField + } + if r.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.VectorField != nil { + f4f4f2.VectorField = r.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.VectorField + } + f4f4.FieldMapping = f4f4f2 + } + if r.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.VectorIndexName != nil { + f4f4.VectorIndexName = r.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.VectorIndexName + } + f4.RedisEnterpriseCloudConfiguration = f4f4 + } + if r.ko.Spec.StorageConfiguration.Type != nil { + f4.Type = svcsdktypes.KnowledgeBaseStorageType(*r.ko.Spec.StorageConfiguration.Type) + } + res.StorageConfiguration = f4 + } + if r.ko.Spec.Tags != nil { + res.Tags = aws.ToStringMap(r.ko.Spec.Tags) + } + + return res, nil +} + +// sdkUpdate patches the supplied resource in the backend AWS service API and +// returns a new resource with updated fields. +func (rm *resourceManager) sdkUpdate( + ctx context.Context, + desired *resource, + latest *resource, + delta *ackcompare.Delta, +) (updated *resource, err error) { + rlog := ackrtlog.FromContext(ctx) + exit := rlog.Trace("rm.sdkUpdate") + defer func() { + exit(err) + }() + input, err := rm.newUpdateRequestPayload(ctx, desired, delta) + if err != nil { + return nil, err + } + + var resp *svcsdk.UpdateKnowledgeBaseOutput + _ = resp + resp, err = rm.sdkapi.UpdateKnowledgeBase(ctx, input) + rm.metrics.RecordAPICall("UPDATE", "UpdateKnowledgeBase", err) + if err != nil { + return nil, err + } + // Merge in the information we read from the API call above to the copy of + // the original Kubernetes object we passed to the function + ko := desired.ko.DeepCopy() + + if resp.KnowledgeBase.CreatedAt != nil { + ko.Status.CreatedAt = &metav1.Time{*resp.KnowledgeBase.CreatedAt} + } else { + ko.Status.CreatedAt = nil + } + if resp.KnowledgeBase.Description != nil { + ko.Spec.Description = resp.KnowledgeBase.Description + } else { + ko.Spec.Description = nil + } + if resp.KnowledgeBase.FailureReasons != nil { + ko.Status.FailureReasons = aws.StringSlice(resp.KnowledgeBase.FailureReasons) + } else { + ko.Status.FailureReasons = nil + } + if ko.Status.ACKResourceMetadata == nil { + ko.Status.ACKResourceMetadata = &ackv1alpha1.ResourceMetadata{} + } + if resp.KnowledgeBase.KnowledgeBaseArn != nil { + arn := ackv1alpha1.AWSResourceName(*resp.KnowledgeBase.KnowledgeBaseArn) + ko.Status.ACKResourceMetadata.ARN = &arn + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration != nil { + f4 := &svcapitypes.KnowledgeBaseConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration != nil { + f4f0 := &svcapitypes.KendraKnowledgeBaseConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration.KendraIndexArn != nil { + f4f0.KendraIndexARN = resp.KnowledgeBase.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration.KendraIndexArn + } + f4.KendraKnowledgeBaseConfiguration = f4f0 + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration != nil { + f4f1 := &svcapitypes.SQLKnowledgeBaseConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration != nil { + f4f1f0 := &svcapitypes.RedshiftConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration != nil { + f4f1f0f0 := &svcapitypes.RedshiftQueryEngineConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration != nil { + f4f1f0f0f0 := &svcapitypes.RedshiftProvisionedConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration != nil { + f4f1f0f0f0f0 := &svcapitypes.RedshiftProvisionedAuthConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.DatabaseUser != nil { + f4f1f0f0f0f0.DatabaseUser = resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.DatabaseUser + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.Type != "" { + f4f1f0f0f0f0.Type = aws.String(string(resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.Type)) + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.UsernamePasswordSecretArn != nil { + f4f1f0f0f0f0.UsernamePasswordSecretARN = resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.UsernamePasswordSecretArn + } + f4f1f0f0f0.AuthConfiguration = f4f1f0f0f0f0 + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.ClusterIdentifier != nil { + f4f1f0f0f0.ClusterIdentifier = resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.ClusterIdentifier + } + f4f1f0f0.ProvisionedConfiguration = f4f1f0f0f0 + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration != nil { + f4f1f0f0f1 := &svcapitypes.RedshiftServerlessConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration != nil { + f4f1f0f0f1f0 := &svcapitypes.RedshiftServerlessAuthConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.Type != "" { + f4f1f0f0f1f0.Type = aws.String(string(resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.Type)) + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.UsernamePasswordSecretArn != nil { + f4f1f0f0f1f0.UsernamePasswordSecretARN = resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.UsernamePasswordSecretArn + } + f4f1f0f0f1.AuthConfiguration = f4f1f0f0f1f0 + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.WorkgroupArn != nil { + f4f1f0f0f1.WorkgroupARN = resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.WorkgroupArn + } + f4f1f0f0.ServerlessConfiguration = f4f1f0f0f1 + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.Type != "" { + f4f1f0f0.Type = aws.String(string(resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.Type)) + } + f4f1f0.QueryEngineConfiguration = f4f1f0f0 + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration != nil { + f4f1f0f1 := &svcapitypes.QueryGenerationConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.ExecutionTimeoutSeconds != nil { + executionTimeoutSecondsCopy := int64(*resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.ExecutionTimeoutSeconds) + f4f1f0f1.ExecutionTimeoutSeconds = &executionTimeoutSecondsCopy + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext != nil { + f4f1f0f1f1 := &svcapitypes.QueryGenerationContext{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.CuratedQueries != nil { + f4f1f0f1f1f0 := []*svcapitypes.CuratedQuery{} + for _, f4f1f0f1f1f0iter := range resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.CuratedQueries { + f4f1f0f1f1f0elem := &svcapitypes.CuratedQuery{} + if f4f1f0f1f1f0iter.NaturalLanguage != nil { + f4f1f0f1f1f0elem.NATuralLanguage = f4f1f0f1f1f0iter.NaturalLanguage + } + if f4f1f0f1f1f0iter.Sql != nil { + f4f1f0f1f1f0elem.SQL = f4f1f0f1f1f0iter.Sql + } + f4f1f0f1f1f0 = append(f4f1f0f1f1f0, f4f1f0f1f1f0elem) + } + f4f1f0f1f1.CuratedQueries = f4f1f0f1f1f0 + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.Tables != nil { + f4f1f0f1f1f1 := []*svcapitypes.QueryGenerationTable{} + for _, f4f1f0f1f1f1iter := range resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.Tables { + f4f1f0f1f1f1elem := &svcapitypes.QueryGenerationTable{} + if f4f1f0f1f1f1iter.Columns != nil { + f4f1f0f1f1f1elemf0 := []*svcapitypes.QueryGenerationColumn{} + for _, f4f1f0f1f1f1elemf0iter := range f4f1f0f1f1f1iter.Columns { + f4f1f0f1f1f1elemf0elem := &svcapitypes.QueryGenerationColumn{} + if f4f1f0f1f1f1elemf0iter.Description != nil { + f4f1f0f1f1f1elemf0elem.Description = f4f1f0f1f1f1elemf0iter.Description + } + if f4f1f0f1f1f1elemf0iter.Inclusion != "" { + f4f1f0f1f1f1elemf0elem.Inclusion = aws.String(string(f4f1f0f1f1f1elemf0iter.Inclusion)) + } + if f4f1f0f1f1f1elemf0iter.Name != nil { + f4f1f0f1f1f1elemf0elem.Name = f4f1f0f1f1f1elemf0iter.Name + } + f4f1f0f1f1f1elemf0 = append(f4f1f0f1f1f1elemf0, f4f1f0f1f1f1elemf0elem) + } + f4f1f0f1f1f1elem.Columns = f4f1f0f1f1f1elemf0 + } + if f4f1f0f1f1f1iter.Description != nil { + f4f1f0f1f1f1elem.Description = f4f1f0f1f1f1iter.Description + } + if f4f1f0f1f1f1iter.Inclusion != "" { + f4f1f0f1f1f1elem.Inclusion = aws.String(string(f4f1f0f1f1f1iter.Inclusion)) + } + if f4f1f0f1f1f1iter.Name != nil { + f4f1f0f1f1f1elem.Name = f4f1f0f1f1f1iter.Name + } + f4f1f0f1f1f1 = append(f4f1f0f1f1f1, f4f1f0f1f1f1elem) + } + f4f1f0f1f1.Tables = f4f1f0f1f1f1 + } + f4f1f0f1.GenerationContext = f4f1f0f1f1 + } + f4f1f0.QueryGenerationConfiguration = f4f1f0f1 + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.StorageConfigurations != nil { + f4f1f0f2 := []*svcapitypes.RedshiftQueryEngineStorageConfiguration{} + for _, f4f1f0f2iter := range resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.RedshiftConfiguration.StorageConfigurations { + f4f1f0f2elem := &svcapitypes.RedshiftQueryEngineStorageConfiguration{} + if f4f1f0f2iter.AwsDataCatalogConfiguration != nil { + f4f1f0f2elemf0 := &svcapitypes.RedshiftQueryEngineAWSDataCatalogStorageConfiguration{} + if f4f1f0f2iter.AwsDataCatalogConfiguration.TableNames != nil { + f4f1f0f2elemf0.TableNames = aws.StringSlice(f4f1f0f2iter.AwsDataCatalogConfiguration.TableNames) + } + f4f1f0f2elem.AWSDataCatalogConfiguration = f4f1f0f2elemf0 + } + if f4f1f0f2iter.RedshiftConfiguration != nil { + f4f1f0f2elemf1 := &svcapitypes.RedshiftQueryEngineRedshiftStorageConfiguration{} + if f4f1f0f2iter.RedshiftConfiguration.DatabaseName != nil { + f4f1f0f2elemf1.DatabaseName = f4f1f0f2iter.RedshiftConfiguration.DatabaseName + } + f4f1f0f2elem.RedshiftConfiguration = f4f1f0f2elemf1 + } + if f4f1f0f2iter.Type != "" { + f4f1f0f2elem.Type = aws.String(string(f4f1f0f2iter.Type)) + } + f4f1f0f2 = append(f4f1f0f2, f4f1f0f2elem) + } + f4f1f0.StorageConfigurations = f4f1f0f2 + } + f4f1.RedshiftConfiguration = f4f1f0 + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.Type != "" { + f4f1.Type = aws.String(string(resp.KnowledgeBase.KnowledgeBaseConfiguration.SqlKnowledgeBaseConfiguration.Type)) + } + f4.SQLKnowledgeBaseConfiguration = f4f1 + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.Type != "" { + f4.Type = aws.String(string(resp.KnowledgeBase.KnowledgeBaseConfiguration.Type)) + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration != nil { + f4f3 := &svcapitypes.VectorKnowledgeBaseConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelArn != nil { + f4f3.EmbeddingModelARN = resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelArn + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration != nil { + f4f3f1 := &svcapitypes.EmbeddingModelConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration != nil { + f4f3f1f0 := &svcapitypes.BedrockEmbeddingModelConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.Dimensions != nil { + dimensionsCopy := int64(*resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.Dimensions) + f4f3f1f0.Dimensions = &dimensionsCopy + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.EmbeddingDataType != "" { + f4f3f1f0.EmbeddingDataType = aws.String(string(resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.EmbeddingDataType)) + } + f4f3f1.BedrockEmbeddingModelConfiguration = f4f3f1f0 + } + f4f3.EmbeddingModelConfiguration = f4f3f1 + } + if resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.SupplementalDataStorageConfiguration != nil { + f4f3f2 := &svcapitypes.SupplementalDataStorageConfiguration{} + if resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.SupplementalDataStorageConfiguration.StorageLocations != nil { + f4f3f2f0 := []*svcapitypes.SupplementalDataStorageLocation{} + for _, f4f3f2f0iter := range resp.KnowledgeBase.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.SupplementalDataStorageConfiguration.StorageLocations { + f4f3f2f0elem := &svcapitypes.SupplementalDataStorageLocation{} + if f4f3f2f0iter.S3Location != nil { + f4f3f2f0elemf0 := &svcapitypes.S3Location{} + if f4f3f2f0iter.S3Location.Uri != nil { + f4f3f2f0elemf0.URI = f4f3f2f0iter.S3Location.Uri + } + f4f3f2f0elem.S3Location = f4f3f2f0elemf0 + } + if f4f3f2f0iter.Type != "" { + f4f3f2f0elem.Type = aws.String(string(f4f3f2f0iter.Type)) + } + f4f3f2f0 = append(f4f3f2f0, f4f3f2f0elem) + } + f4f3f2.StorageLocations = f4f3f2f0 + } + f4f3.SupplementalDataStorageConfiguration = f4f3f2 + } + f4.VectorKnowledgeBaseConfiguration = f4f3 + } + ko.Spec.KnowledgeBaseConfiguration = f4 + } else { + ko.Spec.KnowledgeBaseConfiguration = nil + } + if resp.KnowledgeBase.KnowledgeBaseId != nil { + ko.Status.KnowledgeBaseID = resp.KnowledgeBase.KnowledgeBaseId + } else { + ko.Status.KnowledgeBaseID = nil + } + if resp.KnowledgeBase.Name != nil { + ko.Spec.Name = resp.KnowledgeBase.Name + } else { + ko.Spec.Name = nil + } + if resp.KnowledgeBase.RoleArn != nil { + ko.Spec.RoleARN = resp.KnowledgeBase.RoleArn + } else { + ko.Spec.RoleARN = nil + } + if resp.KnowledgeBase.Status != "" { + ko.Status.Status = aws.String(string(resp.KnowledgeBase.Status)) + } else { + ko.Status.Status = nil + } + if resp.KnowledgeBase.StorageConfiguration != nil { + f9 := &svcapitypes.StorageConfiguration{} + if resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration != nil { + f9f0 := &svcapitypes.MongoDBAtlasConfiguration{} + if resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.CollectionName != nil { + f9f0.CollectionName = resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.CollectionName + } + if resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.CredentialsSecretArn != nil { + f9f0.CredentialsSecretARN = resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.CredentialsSecretArn + } + if resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.DatabaseName != nil { + f9f0.DatabaseName = resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.DatabaseName + } + if resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.Endpoint != nil { + f9f0.Endpoint = resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.Endpoint + } + if resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.EndpointServiceName != nil { + f9f0.EndpointServiceName = resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.EndpointServiceName + } + if resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.FieldMapping != nil { + f9f0f5 := &svcapitypes.MongoDBAtlasFieldMapping{} + if resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.FieldMapping.MetadataField != nil { + f9f0f5.MetadataField = resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.FieldMapping.MetadataField + } + if resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.FieldMapping.TextField != nil { + f9f0f5.TextField = resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.FieldMapping.TextField + } + if resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.FieldMapping.VectorField != nil { + f9f0f5.VectorField = resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.FieldMapping.VectorField + } + f9f0.FieldMapping = f9f0f5 + } + if resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.VectorIndexName != nil { + f9f0.VectorIndexName = resp.KnowledgeBase.StorageConfiguration.MongoDbAtlasConfiguration.VectorIndexName + } + f9.MongoDBAtlasConfiguration = f9f0 + } + if resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration != nil { + f9f1 := &svcapitypes.OpenSearchServerlessConfiguration{} + if resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration.CollectionArn != nil { + f9f1.CollectionARN = resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration.CollectionArn + } + if resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping != nil { + f9f1f1 := &svcapitypes.OpenSearchServerlessFieldMapping{} + if resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.MetadataField != nil { + f9f1f1.MetadataField = resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.MetadataField + } + if resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.TextField != nil { + f9f1f1.TextField = resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.TextField + } + if resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.VectorField != nil { + f9f1f1.VectorField = resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.VectorField + } + f9f1.FieldMapping = f9f1f1 + } + if resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration.VectorIndexName != nil { + f9f1.VectorIndexName = resp.KnowledgeBase.StorageConfiguration.OpensearchServerlessConfiguration.VectorIndexName + } + f9.OpensearchServerlessConfiguration = f9f1 + } + if resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration != nil { + f9f2 := &svcapitypes.PineconeConfiguration{} + if resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration.ConnectionString != nil { + f9f2.ConnectionString = resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration.ConnectionString + } + if resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration.CredentialsSecretArn != nil { + f9f2.CredentialsSecretARN = resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration.CredentialsSecretArn + } + if resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration.FieldMapping != nil { + f9f2f2 := &svcapitypes.PineconeFieldMapping{} + if resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration.FieldMapping.MetadataField != nil { + f9f2f2.MetadataField = resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration.FieldMapping.MetadataField + } + if resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration.FieldMapping.TextField != nil { + f9f2f2.TextField = resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration.FieldMapping.TextField + } + f9f2.FieldMapping = f9f2f2 + } + if resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration.Namespace != nil { + f9f2.Namespace = resp.KnowledgeBase.StorageConfiguration.PineconeConfiguration.Namespace + } + f9.PineconeConfiguration = f9f2 + } + if resp.KnowledgeBase.StorageConfiguration.RdsConfiguration != nil { + f9f3 := &svcapitypes.RdsConfiguration{} + if resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.CredentialsSecretArn != nil { + f9f3.CredentialsSecretARN = resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.CredentialsSecretArn + } + if resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.DatabaseName != nil { + f9f3.DatabaseName = resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.DatabaseName + } + if resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.FieldMapping != nil { + f9f3f2 := &svcapitypes.RdsFieldMapping{} + if resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.FieldMapping.MetadataField != nil { + f9f3f2.MetadataField = resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.FieldMapping.MetadataField + } + if resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.FieldMapping.PrimaryKeyField != nil { + f9f3f2.PrimaryKeyField = resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.FieldMapping.PrimaryKeyField + } + if resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.FieldMapping.TextField != nil { + f9f3f2.TextField = resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.FieldMapping.TextField + } + if resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.FieldMapping.VectorField != nil { + f9f3f2.VectorField = resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.FieldMapping.VectorField + } + f9f3.FieldMapping = f9f3f2 + } + if resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.ResourceArn != nil { + f9f3.ResourceARN = resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.ResourceArn + } + if resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.TableName != nil { + f9f3.TableName = resp.KnowledgeBase.StorageConfiguration.RdsConfiguration.TableName + } + f9.RdsConfiguration = f9f3 + } + if resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration != nil { + f9f4 := &svcapitypes.RedisEnterpriseCloudConfiguration{} + if resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.CredentialsSecretArn != nil { + f9f4.CredentialsSecretARN = resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.CredentialsSecretArn + } + if resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.Endpoint != nil { + f9f4.Endpoint = resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.Endpoint + } + if resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping != nil { + f9f4f2 := &svcapitypes.RedisEnterpriseCloudFieldMapping{} + if resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.MetadataField != nil { + f9f4f2.MetadataField = resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.MetadataField + } + if resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.TextField != nil { + f9f4f2.TextField = resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.TextField + } + if resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.VectorField != nil { + f9f4f2.VectorField = resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.VectorField + } + f9f4.FieldMapping = f9f4f2 + } + if resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.VectorIndexName != nil { + f9f4.VectorIndexName = resp.KnowledgeBase.StorageConfiguration.RedisEnterpriseCloudConfiguration.VectorIndexName + } + f9.RedisEnterpriseCloudConfiguration = f9f4 + } + if resp.KnowledgeBase.StorageConfiguration.Type != "" { + f9.Type = aws.String(string(resp.KnowledgeBase.StorageConfiguration.Type)) + } + ko.Spec.StorageConfiguration = f9 + } else { + ko.Spec.StorageConfiguration = nil + } + if resp.KnowledgeBase.UpdatedAt != nil { + ko.Status.UpdatedAt = &metav1.Time{*resp.KnowledgeBase.UpdatedAt} + } else { + ko.Status.UpdatedAt = nil + } + + rm.setStatusDefaults(ko) + return &resource{ko}, nil +} + +// newUpdateRequestPayload returns an SDK-specific struct for the HTTP request +// payload of the Update API call for the resource +func (rm *resourceManager) newUpdateRequestPayload( + ctx context.Context, + r *resource, + delta *ackcompare.Delta, +) (*svcsdk.UpdateKnowledgeBaseInput, error) { + res := &svcsdk.UpdateKnowledgeBaseInput{} + + if r.ko.Spec.Description != nil { + res.Description = r.ko.Spec.Description + } + if r.ko.Spec.KnowledgeBaseConfiguration != nil { + f1 := &svcsdktypes.KnowledgeBaseConfiguration{} + if r.ko.Spec.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration != nil { + f1f0 := &svcsdktypes.KendraKnowledgeBaseConfiguration{} + if r.ko.Spec.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration.KendraIndexARN != nil { + f1f0.KendraIndexArn = r.ko.Spec.KnowledgeBaseConfiguration.KendraKnowledgeBaseConfiguration.KendraIndexARN + } + f1.KendraKnowledgeBaseConfiguration = f1f0 + } + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration != nil { + f1f1 := &svcsdktypes.SqlKnowledgeBaseConfiguration{} + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration != nil { + f1f1f0 := &svcsdktypes.RedshiftConfiguration{} + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration != nil { + f1f1f0f0 := &svcsdktypes.RedshiftQueryEngineConfiguration{} + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration != nil { + f1f1f0f0f0 := &svcsdktypes.RedshiftProvisionedConfiguration{} + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration != nil { + f1f1f0f0f0f0 := &svcsdktypes.RedshiftProvisionedAuthConfiguration{} + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.DatabaseUser != nil { + f1f1f0f0f0f0.DatabaseUser = r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.DatabaseUser + } + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.Type != nil { + f1f1f0f0f0f0.Type = svcsdktypes.RedshiftProvisionedAuthType(*r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.Type) + } + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.UsernamePasswordSecretARN != nil { + f1f1f0f0f0f0.UsernamePasswordSecretArn = r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.AuthConfiguration.UsernamePasswordSecretARN + } + f1f1f0f0f0.AuthConfiguration = f1f1f0f0f0f0 + } + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.ClusterIdentifier != nil { + f1f1f0f0f0.ClusterIdentifier = r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ProvisionedConfiguration.ClusterIdentifier + } + f1f1f0f0.ProvisionedConfiguration = f1f1f0f0f0 + } + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration != nil { + f1f1f0f0f1 := &svcsdktypes.RedshiftServerlessConfiguration{} + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration != nil { + f1f1f0f0f1f0 := &svcsdktypes.RedshiftServerlessAuthConfiguration{} + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.Type != nil { + f1f1f0f0f1f0.Type = svcsdktypes.RedshiftServerlessAuthType(*r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.Type) + } + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.UsernamePasswordSecretARN != nil { + f1f1f0f0f1f0.UsernamePasswordSecretArn = r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.AuthConfiguration.UsernamePasswordSecretARN + } + f1f1f0f0f1.AuthConfiguration = f1f1f0f0f1f0 + } + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.WorkgroupARN != nil { + f1f1f0f0f1.WorkgroupArn = r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.ServerlessConfiguration.WorkgroupARN + } + f1f1f0f0.ServerlessConfiguration = f1f1f0f0f1 + } + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.Type != nil { + f1f1f0f0.Type = svcsdktypes.RedshiftQueryEngineType(*r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryEngineConfiguration.Type) + } + f1f1f0.QueryEngineConfiguration = f1f1f0f0 + } + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration != nil { + f1f1f0f1 := &svcsdktypes.QueryGenerationConfiguration{} + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.ExecutionTimeoutSeconds != nil { + executionTimeoutSecondsCopy0 := *r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.ExecutionTimeoutSeconds + if executionTimeoutSecondsCopy0 > math.MaxInt32 || executionTimeoutSecondsCopy0 < math.MinInt32 { + return nil, fmt.Errorf("error: field executionTimeoutSeconds is of type int32") + } + executionTimeoutSecondsCopy := int32(executionTimeoutSecondsCopy0) + f1f1f0f1.ExecutionTimeoutSeconds = &executionTimeoutSecondsCopy + } + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext != nil { + f1f1f0f1f1 := &svcsdktypes.QueryGenerationContext{} + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.CuratedQueries != nil { + f1f1f0f1f1f0 := []svcsdktypes.CuratedQuery{} + for _, f1f1f0f1f1f0iter := range r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.CuratedQueries { + f1f1f0f1f1f0elem := &svcsdktypes.CuratedQuery{} + if f1f1f0f1f1f0iter.NATuralLanguage != nil { + f1f1f0f1f1f0elem.NaturalLanguage = f1f1f0f1f1f0iter.NATuralLanguage + } + if f1f1f0f1f1f0iter.SQL != nil { + f1f1f0f1f1f0elem.Sql = f1f1f0f1f1f0iter.SQL + } + f1f1f0f1f1f0 = append(f1f1f0f1f1f0, *f1f1f0f1f1f0elem) + } + f1f1f0f1f1.CuratedQueries = f1f1f0f1f1f0 + } + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.Tables != nil { + f1f1f0f1f1f1 := []svcsdktypes.QueryGenerationTable{} + for _, f1f1f0f1f1f1iter := range r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.QueryGenerationConfiguration.GenerationContext.Tables { + f1f1f0f1f1f1elem := &svcsdktypes.QueryGenerationTable{} + if f1f1f0f1f1f1iter.Columns != nil { + f1f1f0f1f1f1elemf0 := []svcsdktypes.QueryGenerationColumn{} + for _, f1f1f0f1f1f1elemf0iter := range f1f1f0f1f1f1iter.Columns { + f1f1f0f1f1f1elemf0elem := &svcsdktypes.QueryGenerationColumn{} + if f1f1f0f1f1f1elemf0iter.Description != nil { + f1f1f0f1f1f1elemf0elem.Description = f1f1f0f1f1f1elemf0iter.Description + } + if f1f1f0f1f1f1elemf0iter.Inclusion != nil { + f1f1f0f1f1f1elemf0elem.Inclusion = svcsdktypes.IncludeExclude(*f1f1f0f1f1f1elemf0iter.Inclusion) + } + if f1f1f0f1f1f1elemf0iter.Name != nil { + f1f1f0f1f1f1elemf0elem.Name = f1f1f0f1f1f1elemf0iter.Name + } + f1f1f0f1f1f1elemf0 = append(f1f1f0f1f1f1elemf0, *f1f1f0f1f1f1elemf0elem) + } + f1f1f0f1f1f1elem.Columns = f1f1f0f1f1f1elemf0 + } + if f1f1f0f1f1f1iter.Description != nil { + f1f1f0f1f1f1elem.Description = f1f1f0f1f1f1iter.Description + } + if f1f1f0f1f1f1iter.Inclusion != nil { + f1f1f0f1f1f1elem.Inclusion = svcsdktypes.IncludeExclude(*f1f1f0f1f1f1iter.Inclusion) + } + if f1f1f0f1f1f1iter.Name != nil { + f1f1f0f1f1f1elem.Name = f1f1f0f1f1f1iter.Name + } + f1f1f0f1f1f1 = append(f1f1f0f1f1f1, *f1f1f0f1f1f1elem) + } + f1f1f0f1f1.Tables = f1f1f0f1f1f1 + } + f1f1f0f1.GenerationContext = f1f1f0f1f1 + } + f1f1f0.QueryGenerationConfiguration = f1f1f0f1 + } + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.StorageConfigurations != nil { + f1f1f0f2 := []svcsdktypes.RedshiftQueryEngineStorageConfiguration{} + for _, f1f1f0f2iter := range r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.RedshiftConfiguration.StorageConfigurations { + f1f1f0f2elem := &svcsdktypes.RedshiftQueryEngineStorageConfiguration{} + if f1f1f0f2iter.AWSDataCatalogConfiguration != nil { + f1f1f0f2elemf0 := &svcsdktypes.RedshiftQueryEngineAwsDataCatalogStorageConfiguration{} + if f1f1f0f2iter.AWSDataCatalogConfiguration.TableNames != nil { + f1f1f0f2elemf0.TableNames = aws.ToStringSlice(f1f1f0f2iter.AWSDataCatalogConfiguration.TableNames) + } + f1f1f0f2elem.AwsDataCatalogConfiguration = f1f1f0f2elemf0 + } + if f1f1f0f2iter.RedshiftConfiguration != nil { + f1f1f0f2elemf1 := &svcsdktypes.RedshiftQueryEngineRedshiftStorageConfiguration{} + if f1f1f0f2iter.RedshiftConfiguration.DatabaseName != nil { + f1f1f0f2elemf1.DatabaseName = f1f1f0f2iter.RedshiftConfiguration.DatabaseName + } + f1f1f0f2elem.RedshiftConfiguration = f1f1f0f2elemf1 + } + if f1f1f0f2iter.Type != nil { + f1f1f0f2elem.Type = svcsdktypes.RedshiftQueryEngineStorageType(*f1f1f0f2iter.Type) + } + f1f1f0f2 = append(f1f1f0f2, *f1f1f0f2elem) + } + f1f1f0.StorageConfigurations = f1f1f0f2 + } + f1f1.RedshiftConfiguration = f1f1f0 + } + if r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.Type != nil { + f1f1.Type = svcsdktypes.QueryEngineType(*r.ko.Spec.KnowledgeBaseConfiguration.SQLKnowledgeBaseConfiguration.Type) + } + f1.SqlKnowledgeBaseConfiguration = f1f1 + } + if r.ko.Spec.KnowledgeBaseConfiguration.Type != nil { + f1.Type = svcsdktypes.KnowledgeBaseType(*r.ko.Spec.KnowledgeBaseConfiguration.Type) + } + if r.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration != nil { + f1f3 := &svcsdktypes.VectorKnowledgeBaseConfiguration{} + if r.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelARN != nil { + f1f3.EmbeddingModelArn = r.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelARN + } + if r.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration != nil { + f1f3f1 := &svcsdktypes.EmbeddingModelConfiguration{} + if r.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration != nil { + f1f3f1f0 := &svcsdktypes.BedrockEmbeddingModelConfiguration{} + if r.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.Dimensions != nil { + dimensionsCopy0 := *r.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.Dimensions + if dimensionsCopy0 > math.MaxInt32 || dimensionsCopy0 < math.MinInt32 { + return nil, fmt.Errorf("error: field dimensions is of type int32") + } + dimensionsCopy := int32(dimensionsCopy0) + f1f3f1f0.Dimensions = &dimensionsCopy + } + if r.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.EmbeddingDataType != nil { + f1f3f1f0.EmbeddingDataType = svcsdktypes.EmbeddingDataType(*r.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.EmbeddingModelConfiguration.BedrockEmbeddingModelConfiguration.EmbeddingDataType) + } + f1f3f1.BedrockEmbeddingModelConfiguration = f1f3f1f0 + } + f1f3.EmbeddingModelConfiguration = f1f3f1 + } + if r.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.SupplementalDataStorageConfiguration != nil { + f1f3f2 := &svcsdktypes.SupplementalDataStorageConfiguration{} + if r.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.SupplementalDataStorageConfiguration.StorageLocations != nil { + f1f3f2f0 := []svcsdktypes.SupplementalDataStorageLocation{} + for _, f1f3f2f0iter := range r.ko.Spec.KnowledgeBaseConfiguration.VectorKnowledgeBaseConfiguration.SupplementalDataStorageConfiguration.StorageLocations { + f1f3f2f0elem := &svcsdktypes.SupplementalDataStorageLocation{} + if f1f3f2f0iter.S3Location != nil { + f1f3f2f0elemf0 := &svcsdktypes.S3Location{} + if f1f3f2f0iter.S3Location.URI != nil { + f1f3f2f0elemf0.Uri = f1f3f2f0iter.S3Location.URI + } + f1f3f2f0elem.S3Location = f1f3f2f0elemf0 + } + if f1f3f2f0iter.Type != nil { + f1f3f2f0elem.Type = svcsdktypes.SupplementalDataStorageLocationType(*f1f3f2f0iter.Type) + } + f1f3f2f0 = append(f1f3f2f0, *f1f3f2f0elem) + } + f1f3f2.StorageLocations = f1f3f2f0 + } + f1f3.SupplementalDataStorageConfiguration = f1f3f2 + } + f1.VectorKnowledgeBaseConfiguration = f1f3 + } + res.KnowledgeBaseConfiguration = f1 + } + if r.ko.Status.KnowledgeBaseID != nil { + res.KnowledgeBaseId = r.ko.Status.KnowledgeBaseID + } + if r.ko.Spec.Name != nil { + res.Name = r.ko.Spec.Name + } + if r.ko.Spec.RoleARN != nil { + res.RoleArn = r.ko.Spec.RoleARN + } + if r.ko.Spec.StorageConfiguration != nil { + f5 := &svcsdktypes.StorageConfiguration{} + if r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration != nil { + f5f0 := &svcsdktypes.MongoDbAtlasConfiguration{} + if r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.CollectionName != nil { + f5f0.CollectionName = r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.CollectionName + } + if r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.CredentialsSecretARN != nil { + f5f0.CredentialsSecretArn = r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.CredentialsSecretARN + } + if r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.DatabaseName != nil { + f5f0.DatabaseName = r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.DatabaseName + } + if r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.Endpoint != nil { + f5f0.Endpoint = r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.Endpoint + } + if r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.EndpointServiceName != nil { + f5f0.EndpointServiceName = r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.EndpointServiceName + } + if r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping != nil { + f5f0f5 := &svcsdktypes.MongoDbAtlasFieldMapping{} + if r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.MetadataField != nil { + f5f0f5.MetadataField = r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.MetadataField + } + if r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.TextField != nil { + f5f0f5.TextField = r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.TextField + } + if r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.VectorField != nil { + f5f0f5.VectorField = r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.FieldMapping.VectorField + } + f5f0.FieldMapping = f5f0f5 + } + if r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.VectorIndexName != nil { + f5f0.VectorIndexName = r.ko.Spec.StorageConfiguration.MongoDBAtlasConfiguration.VectorIndexName + } + f5.MongoDbAtlasConfiguration = f5f0 + } + if r.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration != nil { + f5f1 := &svcsdktypes.OpenSearchServerlessConfiguration{} + if r.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.CollectionARN != nil { + f5f1.CollectionArn = r.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.CollectionARN + } + if r.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping != nil { + f5f1f1 := &svcsdktypes.OpenSearchServerlessFieldMapping{} + if r.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.MetadataField != nil { + f5f1f1.MetadataField = r.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.MetadataField + } + if r.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.TextField != nil { + f5f1f1.TextField = r.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.TextField + } + if r.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.VectorField != nil { + f5f1f1.VectorField = r.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.FieldMapping.VectorField + } + f5f1.FieldMapping = f5f1f1 + } + if r.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.VectorIndexName != nil { + f5f1.VectorIndexName = r.ko.Spec.StorageConfiguration.OpensearchServerlessConfiguration.VectorIndexName + } + f5.OpensearchServerlessConfiguration = f5f1 + } + if r.ko.Spec.StorageConfiguration.PineconeConfiguration != nil { + f5f2 := &svcsdktypes.PineconeConfiguration{} + if r.ko.Spec.StorageConfiguration.PineconeConfiguration.ConnectionString != nil { + f5f2.ConnectionString = r.ko.Spec.StorageConfiguration.PineconeConfiguration.ConnectionString + } + if r.ko.Spec.StorageConfiguration.PineconeConfiguration.CredentialsSecretARN != nil { + f5f2.CredentialsSecretArn = r.ko.Spec.StorageConfiguration.PineconeConfiguration.CredentialsSecretARN + } + if r.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping != nil { + f5f2f2 := &svcsdktypes.PineconeFieldMapping{} + if r.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping.MetadataField != nil { + f5f2f2.MetadataField = r.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping.MetadataField + } + if r.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping.TextField != nil { + f5f2f2.TextField = r.ko.Spec.StorageConfiguration.PineconeConfiguration.FieldMapping.TextField + } + f5f2.FieldMapping = f5f2f2 + } + if r.ko.Spec.StorageConfiguration.PineconeConfiguration.Namespace != nil { + f5f2.Namespace = r.ko.Spec.StorageConfiguration.PineconeConfiguration.Namespace + } + f5.PineconeConfiguration = f5f2 + } + if r.ko.Spec.StorageConfiguration.RdsConfiguration != nil { + f5f3 := &svcsdktypes.RdsConfiguration{} + if r.ko.Spec.StorageConfiguration.RdsConfiguration.CredentialsSecretARN != nil { + f5f3.CredentialsSecretArn = r.ko.Spec.StorageConfiguration.RdsConfiguration.CredentialsSecretARN + } + if r.ko.Spec.StorageConfiguration.RdsConfiguration.DatabaseName != nil { + f5f3.DatabaseName = r.ko.Spec.StorageConfiguration.RdsConfiguration.DatabaseName + } + if r.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping != nil { + f5f3f2 := &svcsdktypes.RdsFieldMapping{} + if r.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.MetadataField != nil { + f5f3f2.MetadataField = r.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.MetadataField + } + if r.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.PrimaryKeyField != nil { + f5f3f2.PrimaryKeyField = r.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.PrimaryKeyField + } + if r.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.TextField != nil { + f5f3f2.TextField = r.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.TextField + } + if r.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.VectorField != nil { + f5f3f2.VectorField = r.ko.Spec.StorageConfiguration.RdsConfiguration.FieldMapping.VectorField + } + f5f3.FieldMapping = f5f3f2 + } + if r.ko.Spec.StorageConfiguration.RdsConfiguration.ResourceARN != nil { + f5f3.ResourceArn = r.ko.Spec.StorageConfiguration.RdsConfiguration.ResourceARN + } + if r.ko.Spec.StorageConfiguration.RdsConfiguration.TableName != nil { + f5f3.TableName = r.ko.Spec.StorageConfiguration.RdsConfiguration.TableName + } + f5.RdsConfiguration = f5f3 + } + if r.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration != nil { + f5f4 := &svcsdktypes.RedisEnterpriseCloudConfiguration{} + if r.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.CredentialsSecretARN != nil { + f5f4.CredentialsSecretArn = r.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.CredentialsSecretARN + } + if r.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.Endpoint != nil { + f5f4.Endpoint = r.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.Endpoint + } + if r.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping != nil { + f5f4f2 := &svcsdktypes.RedisEnterpriseCloudFieldMapping{} + if r.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.MetadataField != nil { + f5f4f2.MetadataField = r.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.MetadataField + } + if r.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.TextField != nil { + f5f4f2.TextField = r.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.TextField + } + if r.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.VectorField != nil { + f5f4f2.VectorField = r.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.FieldMapping.VectorField + } + f5f4.FieldMapping = f5f4f2 + } + if r.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.VectorIndexName != nil { + f5f4.VectorIndexName = r.ko.Spec.StorageConfiguration.RedisEnterpriseCloudConfiguration.VectorIndexName + } + f5.RedisEnterpriseCloudConfiguration = f5f4 + } + if r.ko.Spec.StorageConfiguration.Type != nil { + f5.Type = svcsdktypes.KnowledgeBaseStorageType(*r.ko.Spec.StorageConfiguration.Type) + } + res.StorageConfiguration = f5 + } + + return res, nil +} + +// sdkDelete deletes the supplied resource in the backend AWS service API +func (rm *resourceManager) sdkDelete( + ctx context.Context, + r *resource, +) (latest *resource, err error) { + rlog := ackrtlog.FromContext(ctx) + exit := rlog.Trace("rm.sdkDelete") + defer func() { + exit(err) + }() + input, err := rm.newDeleteRequestPayload(r) + if err != nil { + return nil, err + } + var resp *svcsdk.DeleteKnowledgeBaseOutput + _ = resp + resp, err = rm.sdkapi.DeleteKnowledgeBase(ctx, input) + rm.metrics.RecordAPICall("DELETE", "DeleteKnowledgeBase", err) + return nil, err +} + +// newDeleteRequestPayload returns an SDK-specific struct for the HTTP request +// payload of the Delete API call for the resource +func (rm *resourceManager) newDeleteRequestPayload( + r *resource, +) (*svcsdk.DeleteKnowledgeBaseInput, error) { + res := &svcsdk.DeleteKnowledgeBaseInput{} + + if r.ko.Status.KnowledgeBaseID != nil { + res.KnowledgeBaseId = r.ko.Status.KnowledgeBaseID + } + + return res, nil +} + +// setStatusDefaults sets default properties into supplied custom resource +func (rm *resourceManager) setStatusDefaults( + ko *svcapitypes.KnowledgeBase, +) { + if ko.Status.ACKResourceMetadata == nil { + ko.Status.ACKResourceMetadata = &ackv1alpha1.ResourceMetadata{} + } + if ko.Status.ACKResourceMetadata.Region == nil { + ko.Status.ACKResourceMetadata.Region = &rm.awsRegion + } + if ko.Status.ACKResourceMetadata.OwnerAccountID == nil { + ko.Status.ACKResourceMetadata.OwnerAccountID = &rm.awsAccountID + } + if ko.Status.Conditions == nil { + ko.Status.Conditions = []*ackv1alpha1.Condition{} + } +} + +// updateConditions returns updated resource, true; if conditions were updated +// else it returns nil, false +func (rm *resourceManager) updateConditions( + r *resource, + onSuccess bool, + err error, +) (*resource, bool) { + ko := r.ko.DeepCopy() + rm.setStatusDefaults(ko) + + // Terminal condition + var terminalCondition *ackv1alpha1.Condition = nil + var recoverableCondition *ackv1alpha1.Condition = nil + var syncCondition *ackv1alpha1.Condition = nil + for _, condition := range ko.Status.Conditions { + if condition.Type == ackv1alpha1.ConditionTypeTerminal { + terminalCondition = condition + } + if condition.Type == ackv1alpha1.ConditionTypeRecoverable { + recoverableCondition = condition + } + if condition.Type == ackv1alpha1.ConditionTypeResourceSynced { + syncCondition = condition + } + } + var termError *ackerr.TerminalError + if rm.terminalAWSError(err) || err == ackerr.SecretTypeNotSupported || err == ackerr.SecretNotFound || errors.As(err, &termError) { + if terminalCondition == nil { + terminalCondition = &ackv1alpha1.Condition{ + Type: ackv1alpha1.ConditionTypeTerminal, + } + ko.Status.Conditions = append(ko.Status.Conditions, terminalCondition) + } + var errorMessage = "" + if err == ackerr.SecretTypeNotSupported || err == ackerr.SecretNotFound || errors.As(err, &termError) { + errorMessage = err.Error() + } else { + awsErr, _ := ackerr.AWSError(err) + errorMessage = awsErr.Error() + } + terminalCondition.Status = corev1.ConditionTrue + terminalCondition.Message = &errorMessage + } else { + // Clear the terminal condition if no longer present + if terminalCondition != nil { + terminalCondition.Status = corev1.ConditionFalse + terminalCondition.Message = nil + } + // Handling Recoverable Conditions + if err != nil { + if recoverableCondition == nil { + // Add a new Condition containing a non-terminal error + recoverableCondition = &ackv1alpha1.Condition{ + Type: ackv1alpha1.ConditionTypeRecoverable, + } + ko.Status.Conditions = append(ko.Status.Conditions, recoverableCondition) + } + recoverableCondition.Status = corev1.ConditionTrue + awsErr, _ := ackerr.AWSError(err) + errorMessage := err.Error() + if awsErr != nil { + errorMessage = awsErr.Error() + } + recoverableCondition.Message = &errorMessage + } else if recoverableCondition != nil { + recoverableCondition.Status = corev1.ConditionFalse + recoverableCondition.Message = nil + } + } + // Required to avoid the "declared but not used" error in the default case + _ = syncCondition + if terminalCondition != nil || recoverableCondition != nil || syncCondition != nil { + return &resource{ko}, true // updated + } + return nil, false // not updated +} + +// terminalAWSError returns awserr, true; if the supplied error is an aws Error type +// and if the exception indicates that it is a Terminal exception +// 'Terminal' exception are specified in generator configuration +func (rm *resourceManager) terminalAWSError(err error) bool { + if err == nil { + return false + } + + var terminalErr smithy.APIError + if !errors.As(err, &terminalErr) { + return false + } + switch terminalErr.ErrorCode() { + case "ValidationException": + return true + default: + return false + } +} diff --git a/pkg/resource/knowledge_base/tags.go b/pkg/resource/knowledge_base/tags.go new file mode 100644 index 0000000..089d157 --- /dev/null +++ b/pkg/resource/knowledge_base/tags.go @@ -0,0 +1,108 @@ +// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"). You may +// not use this file except in compliance with the License. A copy of the +// License is located at +// +// http://aws.amazon.com/apache2.0/ +// +// or in the "license" file accompanying this file. This file is distributed +// on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +// express or implied. See the License for the specific language governing +// permissions and limitations under the License. + +// Code generated by ack-generate. DO NOT EDIT. + +package knowledge_base + +import ( + "slices" + "strings" + + acktags "github.com/aws-controllers-k8s/runtime/pkg/tags" + + svcapitypes "github.com/aws-controllers-k8s/bedrockagent-controller/apis/v1alpha1" +) + +var ( + _ = svcapitypes.KnowledgeBase{} + _ = acktags.NewTags() + ACKSystemTags = []string{"services.k8s.aws/namespace", "services.k8s.aws/controller-version"} +) + +// convertToOrderedACKTags converts the tags parameter into 'acktags.Tags' shape. +// This method helps in creating the hub(acktags.Tags) for merging +// default controller tags with existing resource tags. It also returns a slice +// of keys maintaining the original key Order when the tags are a list +func convertToOrderedACKTags(tags map[string]*string) (acktags.Tags, []string) { + result := acktags.NewTags() + keyOrder := []string{} + + if len(tags) == 0 { + return result, keyOrder + } + for k, v := range tags { + if v == nil { + result[k] = "" + } else { + result[k] = *v + } + } + + return result, keyOrder +} + +// fromACKTags converts the tags parameter into map[string]*string shape. +// This method helps in setting the tags back inside AWSResource after merging +// default controller tags with existing resource tags. When a list, +// it maintains the order from original +func fromACKTags(tags acktags.Tags, keyOrder []string) map[string]*string { + result := map[string]*string{} + + _ = keyOrder + for k, v := range tags { + result[k] = &v + } + + return result +} + +// ignoreSystemTags ignores tags that have keys that start with "aws:" +// and ACKSystemTags, to avoid patching them to the resourceSpec. +// Eg. resources created with cloudformation have tags that cannot be +// removed by an ACK controller +func ignoreSystemTags(tags acktags.Tags) { + for k := range tags { + if strings.HasPrefix(k, "aws:") || + slices.Contains(ACKSystemTags, k) { + delete(tags, k) + } + } +} + +// syncAWSTags ensures AWS-managed tags (prefixed with "aws:") from the latest resource state +// are preserved in the desired state. This prevents the controller from attempting to +// modify AWS-managed tags, which would result in an error. +// +// AWS-managed tags are automatically added by AWS services (e.g., CloudFormation, Service Catalog) +// and cannot be modified or deleted through normal tag operations. Common examples include: +// - aws:cloudformation:stack-name +// - aws:servicecatalog:productArn +// +// Parameters: +// - a: The target Tags map to be updated (typically desired state) +// - b: The source Tags map containing AWS-managed tags (typically latest state) +// +// Example: +// +// latest := Tags{"aws:cloudformation:stack-name": "my-stack", "environment": "prod"} +// desired := Tags{"environment": "dev"} +// SyncAWSTags(desired, latest) +// desired now contains {"aws:cloudformation:stack-name": "my-stack", "environment": "dev"} +func syncAWSTags(a acktags.Tags, b acktags.Tags) { + for k := range b { + if strings.HasPrefix(k, "aws:") { + a[k] = b[k] + } + } +} diff --git a/test/e2e/bootstrap_resources.py b/test/e2e/bootstrap_resources.py index 47cbf63..bdb9cf8 100644 --- a/test/e2e/bootstrap_resources.py +++ b/test/e2e/bootstrap_resources.py @@ -23,6 +23,7 @@ @dataclass class BootstrapResources(Resources): AgentRole: Role + KnowledgeBaseRole: Role _bootstrap_resources = None diff --git a/test/e2e/knowledge_base.py b/test/e2e/knowledge_base.py new file mode 100644 index 0000000..ee66387 --- /dev/null +++ b/test/e2e/knowledge_base.py @@ -0,0 +1,116 @@ +# Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You may +# not use this file except in compliance with the License. A copy of the +# License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is distributed +# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. See the License for the specific language governing +# permissions and limitations under the License. + +"""Utilities for working with KnowledgeBase resources""" + +import datetime +import time + +import boto3 +import pytest + +DEFAULT_WAIT_UNTIL_EXISTS_TIMEOUT_SECONDS = 60 * 10 +DEFAULT_WAIT_UNTIL_EXISTS_INTERVAL_SECONDS = 15 +DEFAULT_WAIT_UNTIL_DELETED_TIMEOUT_SECONDS = 60 * 10 +DEFAULT_WAIT_UNTIL_DELETED_INTERVAL_SECONDS = 15 + + +def wait_until_exists( + knowledge_base_id: str, + timeout_seconds: int = DEFAULT_WAIT_UNTIL_EXISTS_TIMEOUT_SECONDS, + interval_seconds: int = DEFAULT_WAIT_UNTIL_EXISTS_INTERVAL_SECONDS, +) -> None: + """Waits until a KnowledgeBase with a supplied ID is returned from + Bedrock GetKnowledgeBase API. + + Usage: + from e2e.knowledge_base import wait_until_exists + + wait_until_exists(knowledge_base_id) + + Raises: + pytest.fail upon timeout + """ + now = datetime.datetime.now() + timeout = now + datetime.timedelta(seconds=timeout_seconds) + + while True: + if datetime.datetime.now() >= timeout: + pytest.fail( + "Timed out waiting for KnowledgeBase to exist " + "in Bedrock GetKnowledgeBase API" + ) + time.sleep(interval_seconds) + + latest = get(knowledge_base_id) + if latest is not None: + break + + +def wait_until_deleted( + knowledge_base_id: str, + timeout_seconds: int = DEFAULT_WAIT_UNTIL_DELETED_TIMEOUT_SECONDS, + interval_seconds: int = DEFAULT_WAIT_UNTIL_DELETED_INTERVAL_SECONDS, +) -> None: + """Waits until a KnowledgeBase with a supplied ID is no longer returned from + the Bedrock GetKnowledgeBase API. + + Usage: + from e2e.knowledge_base import wait_until_deleted + + wait_until_deleted(knowledge_base_id) + + Raises: + pytest.fail upon timeout + """ + now = datetime.datetime.now() + timeout = now + datetime.timedelta(seconds=timeout_seconds) + + while True: + if datetime.datetime.now() >= timeout: + pytest.fail( + "Timed out waiting for KnowledgeBase to be " + "deleted in Bedrock GetKnowledgeBase API" + ) + time.sleep(interval_seconds) + + latest = get(knowledge_base_id) + if latest is None: + break + + +def get(knowledge_base_id: str): + """Returns a dict containing the KnowledgeBase record from the Bedrock GetKnowledgeBase + API. + + If no such KnowledgeBase exists, returns None. + """ + client = boto3.client("bedrock-agent") + try: + resp = client.get_knowledge_base(knowledgeBaseId=knowledge_base_id) + return resp["knowledgeBase"] + except client.exceptions.ResourceNotFoundException: + return None + +def getTags(knowledge_base_arn: str): + """Returns a dict containing the Tags for Bedrock KnowledgeBase resource from the Bedrock ListTagsForResource + API. + + If no such Resource exists, returns None. + """ + client = boto3.client("bedrock-agent") + try: + resp = client.list_tags_for_resource(resourceArn=knowledge_base_arn) + return resp["tags"] + except client.exceptions.ResourceNotFoundException: + return None \ No newline at end of file diff --git a/test/e2e/resources/knowledge_base.yaml b/test/e2e/resources/knowledge_base.yaml new file mode 100644 index 0000000..61fd857 --- /dev/null +++ b/test/e2e/resources/knowledge_base.yaml @@ -0,0 +1,23 @@ +apiVersion: bedrockagent.services.k8s.aws/v1alpha1 +kind: KnowledgeBase +metadata: + name: $KNOWLEDGE_BASE_NAME +spec: + tags: + $TAG_KEY_1: $TAG_VALUE_1 + name: $KNOWLEDGE_BASE_NAME + description: $KNOWLEDGE_BASE_DESCRIPTION + roleARN: $KNOWLEDGE_BASE_ROLE_ARN + knowledgeBaseConfiguration: + type: VECTOR + vectorKnowledgeBaseConfiguration: + embeddingModelARN: $EMBEDDING_MODEL_ARN + storageConfiguration: + type: OPENSEARCH_SERVERLESS + opensearchServerlessConfiguration: + collectionARN: $OPENSEARCH_COLLECTION_ARN + vectorIndexName: $VECTOR_INDEX_NAME + fieldMapping: + textField: text + vectorField: vector + metadataField: metadata \ No newline at end of file diff --git a/test/e2e/service_bootstrap.py b/test/e2e/service_bootstrap.py index 3faaa3c..4b42a47 100644 --- a/test/e2e/service_bootstrap.py +++ b/test/e2e/service_bootstrap.py @@ -24,7 +24,8 @@ def service_bootstrap() -> Resources: logging.getLogger().setLevel(logging.INFO) resources = BootstrapResources( - AgentRole=Role("agent-role", "bedrock.amazonaws.com", managed_policies=["arn:aws:iam::aws:policy/AmazonBedrockReadOnly"]) + AgentRole=Role("agent-role", "bedrock.amazonaws.com", managed_policies=["arn:aws:iam::aws:policy/AmazonBedrockReadOnly"]), + KnowledgeBaseRole=Role("knowledge-base-role", "bedrock.amazonaws.com", managed_policies=["arn:aws:iam::aws:policy/AmazonBedrockFullAccess"]) ) try: diff --git a/test/e2e/tests/test_knowledge_base.py b/test/e2e/tests/test_knowledge_base.py new file mode 100644 index 0000000..828bfea --- /dev/null +++ b/test/e2e/tests/test_knowledge_base.py @@ -0,0 +1,180 @@ +# Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You may +# not use this file except in compliance with the License. A copy of the +# License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is distributed +# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +# express or implied. See the License for the specific language governing +# permissions and limitations under the License. + +"""Integration tests for the Bedrock KnowledgeBase resource""" + +import time +from logging import getLogger + +import pytest +from acktest.k8s import condition +from acktest.k8s import resource as k8s +from acktest.resources import random_suffix_name +from e2e import knowledge_base +from e2e import service_marker, CRD_GROUP, CRD_VERSION, load_resource +from e2e.bootstrap_resources import get_bootstrap_resources +from e2e.replacement_values import REPLACEMENT_VALUES + +KNOWLEDGE_BASE_RESOURCE_PLURAL = "knowledgebases" +DELETE_WAIT_AFTER_SECONDS = 10 +DELETE_WAIT_PERIODS = 3 +CHECK_STATUS_WAIT_PERIODS = 5 +CHECK_STATUS_WAIT_SECONDS = 30 +MODIFY_WAIT_AFTER_SECONDS = 30 + +logger = getLogger(__name__) + + +@pytest.fixture(scope="module") +def simple_knowledge_base(): + knowledge_base_name = random_suffix_name("bedrock-test-kb", 32) + knowledge_base_description = "Test knowledge base for e2e testing" + knowledge_base_role_arn = get_bootstrap_resources().KnowledgeBaseRole.arn + embedding_model_arn = "arn:aws:bedrock:us-west-2::foundation-model/amazon.titan-embed-text-v1" + opensearch_collection_arn = "arn:aws:aoss:us-west-2:050752643586:collection/kqs7wb5kssgmnlomcb7e" + vector_index_name = "e2e-index" + knowledge_base_tag_key = "test1" + knowledge_base_tag_value = "value1" + + replacements = REPLACEMENT_VALUES.copy() + replacements["KNOWLEDGE_BASE_NAME"] = knowledge_base_name + replacements["KNOWLEDGE_BASE_DESCRIPTION"] = knowledge_base_description + replacements["KNOWLEDGE_BASE_ROLE_ARN"] = knowledge_base_role_arn + replacements["EMBEDDING_MODEL_ARN"] = embedding_model_arn + replacements["OPENSEARCH_COLLECTION_ARN"] = opensearch_collection_arn + replacements["VECTOR_INDEX_NAME"] = vector_index_name + replacements["TAG_KEY_1"] = knowledge_base_tag_key + replacements["TAG_VALUE_1"] = knowledge_base_tag_value + + resource_data = load_resource( + "knowledge_base", + additional_replacements=replacements, + ) + + ref = k8s.CustomResourceReference( + CRD_GROUP, + CRD_VERSION, + KNOWLEDGE_BASE_RESOURCE_PLURAL, + knowledge_base_name, + namespace="default", + ) + + logger.info("Creating KnowledgeBase %s", knowledge_base_name) + k8s.create_custom_resource(ref, resource_data) + cr = k8s.wait_resource_consumed_by_controller(ref) + + assert k8s.get_resource_exists(ref) + assert cr is not None + assert "status" in cr + assert "knowledgeBaseID" in cr["status"] + assert "ackResourceMetadata" in cr["status"] + assert "arn" in cr["status"]["ackResourceMetadata"] + knowledge_base_id = cr["status"]["knowledgeBaseID"] + knowledge_base_arn = cr["status"]["ackResourceMetadata"]["arn"] + + knowledge_base.wait_until_exists(knowledge_base_id) + logger.info("KnowledgeBase %s exists in cluster", knowledge_base_name) + + yield (ref, cr, knowledge_base_id, knowledge_base_arn) + + logger.info("Deleting KnowledgeBase %s", knowledge_base_name) + _, deleted = k8s.delete_custom_resource( + ref, + wait_periods=DELETE_WAIT_PERIODS, + period_length=DELETE_WAIT_AFTER_SECONDS, + ) + assert deleted + + knowledge_base.wait_until_deleted(knowledge_base_id) + + +@service_marker +@pytest.mark.canary +class TestKnowledgeBase: + def test_crud(self, simple_knowledge_base): + ref, res, knowledge_base_id, knowledge_base_arn = simple_knowledge_base + + assert k8s.wait_on_condition( + ref, + "ACK.ResourceSynced", + "True", + wait_periods=CHECK_STATUS_WAIT_PERIODS, + period_length=CHECK_STATUS_WAIT_SECONDS + ) + + cr = k8s.get_resource(ref) + assert cr is not None + assert "spec" in cr + assert "description" in cr["spec"] + assert cr["spec"]["description"] == "Test knowledge base for e2e testing" + + latest = knowledge_base.get(knowledge_base_id) + assert latest is not None + assert "description" in latest + assert latest["description"] == "Test knowledge base for e2e testing" + + # Test update + updates = { + "spec": {"description": "Updated test knowledge base description"}, + } + k8s.patch_custom_resource(ref, updates) + time.sleep(MODIFY_WAIT_AFTER_SECONDS) + + latest = knowledge_base.get(knowledge_base_id) + assert latest is not None + assert "description" in latest + assert latest["description"] == "Updated test knowledge base description" + + # def test_tags(self, simple_knowledge_base): + # ref, res, knowledge_base_id, knowledge_base_arn = simple_knowledge_base + # + # assert k8s.wait_on_condition( + # ref, + # "ACK.ResourceSynced", + # "True", + # wait_periods=CHECK_STATUS_WAIT_PERIODS, + # period_length=CHECK_STATUS_WAIT_SECONDS + # ) + # + # cr = k8s.get_resource(ref) + # assert cr is not None + # assert "spec" in cr + # assert "tags" in cr["spec"] + # assert cr["spec"]["tags"] == {"test1": "value1"} + # + # latest = knowledge_base.getTags(knowledge_base_arn) + # assert latest is not None + # assert "test1" in latest + # assert latest["test1"] == "value1" + # + # # Test update + # updates = { + # "spec": { + # "tags": { + # "test1": "newValue1", + # "test2": "value2", + # "test3": "value3" + # } + # }, + # } + # k8s.patch_custom_resource(ref, updates) + # time.sleep(MODIFY_WAIT_AFTER_SECONDS) + # + # latest = knowledge_base.getTags(knowledge_base_arn) + # assert latest is not None + # assert "test1" in latest + # assert latest["test1"] == "newValue1" + # assert "test2" in latest + # assert latest["test2"] == "value2" + # assert "test3" in latest + # assert latest["test3"] == "value3"