diff --git a/tools/scaffolder/cmd/main.go b/tools/scaffolder/cmd/main.go index 3c1a732414..f9b1bb7de8 100644 --- a/tools/scaffolder/cmd/main.go +++ b/tools/scaffolder/cmd/main.go @@ -34,9 +34,9 @@ func main() { }, } - rootCmd.Flags().StringVar(&inputPath, "input", "", "Path to openapi2crd result.yaml file (required)") + rootCmd.Flags().StringVar(&inputPath, "input", "", "Path to a CRD yaml file (required)") rootCmd.Flags().StringVar(&crdKind, "crd", "", "CRD kind to generate controller for") - rootCmd.Flags().BoolVar(&listCRDs, "list", false, "List available CRDs from result file") + rootCmd.Flags().BoolVar(&listCRDs, "list", false, "List available CRDs in the input file") rootCmd.Flags().StringVar(&controllerOutDir, "controller-out", "", "Output directory for controller files (default: ../mongodb-atlas-kubernetes/internal/controller)") rootCmd.Flags().StringVar(&translationOutDir, "translation-out", "", "Output directory for translation files (default: ../mongodb-atlas-kubernetes/internal/translation)") rootCmd.Flags().StringVar(&indexerOutDir, "indexer-out", "", "Output directory for indexer files (default: ../mongodb-atlas-kubernetes/internal/indexer)") diff --git a/tools/scaffolder/internal/generate/config.go b/tools/scaffolder/internal/generate/config.go index 4ef050427f..1645f371b4 100644 --- a/tools/scaffolder/internal/generate/config.go +++ b/tools/scaffolder/internal/generate/config.go @@ -237,7 +237,7 @@ func ListCRDs(resultPath string) ([]CRDInfo, error) { } if len(crds) == 0 { - return nil, fmt.Errorf("no CustomResourceDefinition documents found in '%s' - ensure you're using an openapi2crd result.yaml file", resultPath) + return nil, fmt.Errorf("no CustomResourceDefinition documents found in '%s' file", resultPath) } return crds, nil diff --git a/tools/scaffolder/internal/generate/controller.go b/tools/scaffolder/internal/generate/controller.go index b8ba3be267..85bb17587b 100644 --- a/tools/scaffolder/internal/generate/controller.go +++ b/tools/scaffolder/internal/generate/controller.go @@ -54,9 +54,9 @@ func FromConfig(resultPath, crdKind, controllerOutDir, translationOutDir, indexe baseControllerDir := filepath.Join(controllerOutDir, strings.ToLower(resourceName)) - // Generate translation layers for all mappings - if err := GenerateTranslationLayers(resourceName, parsedConfig.Mappings, translationOutDir); err != nil { - return fmt.Errorf("failed to generate translation layers: %w", err) + // Generate service layers for all mappings + if err := GenerateServiceLayers(resourceName, parsedConfig.Mappings, translationOutDir); err != nil { + return fmt.Errorf("failed to generate service layers: %w", err) } controllerName := resourceName diff --git a/tools/scaffolder/internal/generate/translation.go b/tools/scaffolder/internal/generate/service.go similarity index 78% rename from tools/scaffolder/internal/generate/translation.go rename to tools/scaffolder/internal/generate/service.go index 83af77897c..8c7f93ee95 100644 --- a/tools/scaffolder/internal/generate/translation.go +++ b/tools/scaffolder/internal/generate/service.go @@ -23,18 +23,18 @@ import ( "github.com/dave/jennifer/jen" ) -// GenerateTranslationLayers generates translation layers for all mappings -func GenerateTranslationLayers(resourceName string, mappings []MappingWithConfig, translationOutDir string) error { +// GenerateServiceLayers generates service layers for all mappings +func GenerateServiceLayers(resourceName string, mappings []MappingWithConfig, translationOutDir string) error { for _, mapping := range mappings { versionSuffix := mapping.Version - if err := generateTranslationLayerWithVersion(resourceName, versionSuffix, mapping.OpenAPIConfig.Package, translationOutDir); err != nil { - return fmt.Errorf("failed to generate translation layer for version %s: %w", versionSuffix, err) + if err := generateServiceLayerWithVersion(resourceName, versionSuffix, mapping.OpenAPIConfig.Package, translationOutDir); err != nil { + return fmt.Errorf("failed to generate service layer for version %s: %w", versionSuffix, err) } } return nil } -func generateTranslationLayerWithVersion(resourceName, versionSuffix, sdkPackage, translationOutDir string) error { +func generateServiceLayerWithVersion(resourceName, versionSuffix, sdkPackage, translationOutDir string) error { packageName := strings.ToLower(resourceName) + versionSuffix translationDir := filepath.Join(translationOutDir, packageName) @@ -121,15 +121,15 @@ func generateServiceFileWithVersion(dir, resourceName, packageName, sdkPackage s ) // Service implementation struct - f.Type().Id("Atlas"+resourceName+"ServiceImpl").Struct( + f.Type().Id("Atlas" + resourceName + "ServiceImpl").Struct( jen.Id(strings.ToLower(resourceName)+"API").Qual(sdkPackage, atlasAPI), ) // Constructor - f.Func().Id("NewAtlas"+resourceName+"Service").Params( + f.Func().Id("NewAtlas" + resourceName + "Service").Params( jen.Id("api").Qual(sdkPackage, atlasAPI), - ).Id("Atlas"+resourceName+"Service").Block( - jen.Return(jen.Op("&").Id("Atlas"+resourceName+"ServiceImpl").Values(jen.Dict{ + ).Id("Atlas" + resourceName + "Service").Block( + jen.Return(jen.Op("&").Id("Atlas" + resourceName + "ServiceImpl").Values(jen.Dict{ jen.Id(strings.ToLower(resourceName) + "API"): jen.Id("api"), })), ) @@ -164,7 +164,7 @@ func generateServiceFileWithVersion(dir, resourceName, packageName, sdkPackage s jen.Id("ctx").Qual("context", "Context"), jen.Id("orgID").String(), jen.Id("resourceID").String(), - jen.Id("a"+strings.ToLower(resourceName)).Op("*").Id("Atlas"+resourceName), + jen.Id("a" + strings.ToLower(resourceName)).Op("*").Id("Atlas" + resourceName), }, ret: []jen.Code{jen.Op("*").Id("Atlas" + resourceName), jen.Error()}, }, @@ -193,26 +193,26 @@ func generateServiceFileWithVersion(dir, resourceName, packageName, sdkPackage s // GetAtlasAPIForCRD maps CRD kinds to their corresponding Atlas API types func GetAtlasAPIForCRD(crdKind string) (string, error) { apiMapping := map[string]string{ - "Project": "ProjectsApi", - "Group": "ProjectsApi", // Groups are managed by ProjectsApi - "Organization": "OrganizationsApi", - "DatabaseUser": "DatabaseUsersApi", - "Deployment": "ClustersApi", - "StreamInstance": "StreamsApi", - "PrivateEndpoint": "PrivateEndpointServicesApi", - "NetworkPeering": "NetworkPeeringApi", + "Project": "ProjectsApi", + "Group": "ProjectsApi", // Groups are managed by ProjectsApi + "Organization": "OrganizationsApi", + "DatabaseUser": "DatabaseUsersApi", + "Deployment": "ClustersApi", + "StreamInstance": "StreamsApi", + "PrivateEndpoint": "PrivateEndpointServicesApi", + "NetworkPeering": "NetworkPeeringApi", "NetworkPeeringConnection": "NetworkPeeringApi", - "NetworkContainer": "NetworkPeeringApi", - "IPAccessList": "ProjectIPAccessListApi", - "CustomRole": "CustomDatabaseRolesApi", - "BackupCompliancePolicy": "CompliancePoliciesApi", - "DataFederation": "DataFederationApi", - "ThirdPartyIntegrations": "ThirdPartyIntegrationsApi", - "FederatedAuth": "FederatedAuthenticationApi", - "SearchIndexConfig": "AtlasSearchApi", - "OrgSettings": "OrganizationsApi", - "StreamConnection": "StreamsApi", - "Team": "TeamsApi", + "NetworkContainer": "NetworkPeeringApi", + "IPAccessList": "ProjectIPAccessListApi", + "CustomRole": "CustomDatabaseRolesApi", + "BackupCompliancePolicy": "CompliancePoliciesApi", + "DataFederation": "DataFederationApi", + "ThirdPartyIntegrations": "ThirdPartyIntegrationsApi", + "FederatedAuth": "FederatedAuthenticationApi", + "SearchIndexConfig": "AtlasSearchApi", + "OrgSettings": "OrganizationsApi", + "StreamConnection": "StreamsApi", + "Team": "TeamsApi", } if api, exists := apiMapping[crdKind]; exists { @@ -236,4 +236,4 @@ func AddLicenseHeader(f *jen.File) { f.HeaderComment("WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.") f.HeaderComment("See the License for the specific language governing permissions and") f.HeaderComment("limitations under the License.") -} \ No newline at end of file +}