Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions tools/scaffolder/cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)")
Expand Down
2 changes: 1 addition & 1 deletion tools/scaffolder/internal/generate/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 3 additions & 3 deletions tools/scaffolder/internal/generate/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down Expand Up @@ -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"),
})),
)
Expand Down Expand Up @@ -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()},
},
Expand Down Expand Up @@ -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 {
Expand All @@ -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.")
}
}