From 34800c3585d26bd71724481dbcccbe742b434fd6 Mon Sep 17 00:00:00 2001 From: Nicholas Thomson Date: Tue, 12 Oct 2021 13:26:06 -0700 Subject: [PATCH 1/7] Move SDK operations into new package --- cmd/ack-generate/command/common.go | 3 ++- cmd/ack-generate/command/crossplane.go | 4 +-- pkg/generate/ack/apis.go | 3 ++- pkg/generate/ack/controller.go | 27 +++++++++---------- pkg/generate/code/check.go | 13 +++++----- pkg/generate/code/check_test.go | 14 +++++----- pkg/generate/code/set_resource.go | 13 +++++----- pkg/generate/code/set_resource_test.go | 36 +++++++++++++------------- pkg/generate/code/set_sdk.go | 17 ++++++------ pkg/generate/code/set_sdk_test.go | 34 ++++++++++++------------ pkg/generate/crossplane/crossplane.go | 17 ++++++------ pkg/model/crd.go | 11 ++++---- pkg/model/field.go | 3 ++- pkg/model/model.go | 29 +++++++++++---------- pkg/model/multiversion/delta.go | 5 ++-- pkg/model/multiversion/delta_test.go | 6 ++--- pkg/model/multiversion/manager.go | 3 ++- pkg/model/type_def.go | 7 ----- pkg/{model => sdk}/op.go | 2 +- pkg/{model => sdk}/op_test.go | 34 ++++++++++++------------ pkg/{model => sdk}/sdk_helper.go | 8 +++--- pkg/{model => sdk}/sdk_helper_test.go | 10 +++---- pkg/{model => sdk}/types.go | 15 ++++++++--- pkg/{model => sdk}/types_test.go | 7 +++-- pkg/testutil/schema_helper.go | 4 +-- 25 files changed, 167 insertions(+), 158 deletions(-) rename pkg/{model => sdk}/op.go (99%) rename pkg/{model => sdk}/op_test.go (87%) rename pkg/{model => sdk}/sdk_helper.go (98%) rename pkg/{model => sdk}/sdk_helper_test.go (94%) rename pkg/{model => sdk}/types.go (93%) rename pkg/{model => sdk}/types_test.go (91%) diff --git a/cmd/ack-generate/command/common.go b/cmd/ack-generate/command/common.go index 01057080..4d698863 100644 --- a/cmd/ack-generate/command/common.go +++ b/cmd/ack-generate/command/common.go @@ -30,6 +30,7 @@ import ( ackgenerate "github.com/aws-controllers-k8s/code-generator/pkg/generate/ack" ackgenconfig "github.com/aws-controllers-k8s/code-generator/pkg/generate/config" ackmodel "github.com/aws-controllers-k8s/code-generator/pkg/model" + acksdk "github.com/aws-controllers-k8s/code-generator/pkg/sdk" "github.com/aws-controllers-k8s/code-generator/pkg/util" k8sversion "k8s.io/apimachinery/pkg/version" ) @@ -236,7 +237,7 @@ func loadModel(svcAlias string, apiVersion string) (*ackmodel.Model, error) { modelName = svcAlias } - sdkHelper := ackmodel.NewSDKHelper(sdkDir) + sdkHelper := acksdk.NewSDKHelper(sdkDir) sdkAPI, err := sdkHelper.API(modelName) if err != nil { retryModelName, err := FallBackFindServiceID(sdkDir, svcAlias) diff --git a/cmd/ack-generate/command/crossplane.go b/cmd/ack-generate/command/crossplane.go index 7384e424..132fc004 100644 --- a/cmd/ack-generate/command/crossplane.go +++ b/cmd/ack-generate/command/crossplane.go @@ -28,8 +28,8 @@ import ( ackgenerate "github.com/aws-controllers-k8s/code-generator/pkg/generate/ack" ackgenconfig "github.com/aws-controllers-k8s/code-generator/pkg/generate/config" cpgenerate "github.com/aws-controllers-k8s/code-generator/pkg/generate/crossplane" - "github.com/aws-controllers-k8s/code-generator/pkg/model" ackmodel "github.com/aws-controllers-k8s/code-generator/pkg/model" + acksdk "github.com/aws-controllers-k8s/code-generator/pkg/sdk" ) // crossplaneCmd is the command that generates Crossplane API types @@ -70,7 +70,7 @@ func generateCrossplane(_ *cobra.Command, args []string) error { if err != nil { return err } - sdkHelper := model.NewSDKHelper(sdkDir) + sdkHelper := acksdk.NewSDKHelper(sdkDir) sdkHelper.APIGroupSuffix = "aws.crossplane.io" sdkAPI, err := sdkHelper.API(svcAlias) if err != nil { diff --git a/pkg/generate/ack/apis.go b/pkg/generate/ack/apis.go index b3df9156..6f9feb9c 100644 --- a/pkg/generate/ack/apis.go +++ b/pkg/generate/ack/apis.go @@ -20,6 +20,7 @@ import ( "github.com/aws-controllers-k8s/code-generator/pkg/generate/templateset" ackmodel "github.com/aws-controllers-k8s/code-generator/pkg/model" + acksdk "github.com/aws-controllers-k8s/code-generator/pkg/sdk" "github.com/iancoleman/strcase" ) @@ -106,6 +107,6 @@ type templateAPIVars struct { // code for a single top-level resource's API definition type templateCRDVars struct { templateset.MetaVars - SDKAPI *ackmodel.SDKAPI + SDKAPI *acksdk.SDKAPI CRD *ackmodel.CRD } diff --git a/pkg/generate/ack/controller.go b/pkg/generate/ack/controller.go index a51573cc..fc24fe41 100644 --- a/pkg/generate/ack/controller.go +++ b/pkg/generate/ack/controller.go @@ -22,6 +22,7 @@ import ( ackgenconfig "github.com/aws-controllers-k8s/code-generator/pkg/generate/config" "github.com/aws-controllers-k8s/code-generator/pkg/generate/templateset" ackmodel "github.com/aws-controllers-k8s/code-generator/pkg/model" + acksdk "github.com/aws-controllers-k8s/code-generator/pkg/sdk" awssdkmodel "github.com/aws/aws-sdk-go/private/model/api" ) @@ -60,16 +61,16 @@ var ( return code.CheckExceptionMessage(r.Config(), r, httpStatusCode) }, "GoCodeSetReadOneOutput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetResource(r.Config(), r, ackmodel.OpTypeGet, sourceVarName, targetVarName, indentLevel) + return code.SetResource(r.Config(), r, acksdk.OpTypeGet, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetReadOneInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetSDK(r.Config(), r, ackmodel.OpTypeGet, sourceVarName, targetVarName, indentLevel) + return code.SetSDK(r.Config(), r, acksdk.OpTypeGet, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetReadManyOutput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetResource(r.Config(), r, ackmodel.OpTypeList, sourceVarName, targetVarName, indentLevel) + return code.SetResource(r.Config(), r, acksdk.OpTypeList, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetReadManyInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetSDK(r.Config(), r, ackmodel.OpTypeList, sourceVarName, targetVarName, indentLevel) + return code.SetSDK(r.Config(), r, acksdk.OpTypeList, sourceVarName, targetVarName, indentLevel) }, "GoCodeGetAttributesSetInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { return code.SetSDKGetAttributes(r.Config(), r, sourceVarName, targetVarName, indentLevel) @@ -81,19 +82,19 @@ var ( return code.SetResourceGetAttributes(r.Config(), r, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetCreateOutput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetResource(r.Config(), r, ackmodel.OpTypeCreate, sourceVarName, targetVarName, indentLevel) + return code.SetResource(r.Config(), r, acksdk.OpTypeCreate, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetCreateInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetSDK(r.Config(), r, ackmodel.OpTypeCreate, sourceVarName, targetVarName, indentLevel) + return code.SetSDK(r.Config(), r, acksdk.OpTypeCreate, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetUpdateOutput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetResource(r.Config(), r, ackmodel.OpTypeUpdate, sourceVarName, targetVarName, indentLevel) + return code.SetResource(r.Config(), r, acksdk.OpTypeUpdate, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetUpdateInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetSDK(r.Config(), r, ackmodel.OpTypeUpdate, sourceVarName, targetVarName, indentLevel) + return code.SetSDK(r.Config(), r, acksdk.OpTypeUpdate, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetDeleteInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetSDK(r.Config(), r, ackmodel.OpTypeDelete, sourceVarName, targetVarName, indentLevel) + return code.SetSDK(r.Config(), r, acksdk.OpTypeDelete, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetSDKForStruct": func(r *ackmodel.CRD, targetFieldName string, targetVarName string, targetShapeRef *awssdkmodel.ShapeRef, sourceFieldPath string, sourceVarName string, indentLevel int) string { return code.SetSDKForStruct(r.Config(), r, targetFieldName, targetVarName, targetShapeRef, sourceFieldPath, sourceVarName, indentLevel) @@ -108,16 +109,16 @@ var ( return strings.TrimSpace(subject) == "" }, "GoCodeRequiredFieldsMissingFromReadOneInput": func(r *ackmodel.CRD, koVarName string, indentLevel int) string { - return code.CheckRequiredFieldsMissingFromShape(r, ackmodel.OpTypeGet, koVarName, indentLevel) + return code.CheckRequiredFieldsMissingFromShape(r, acksdk.OpTypeGet, koVarName, indentLevel) }, "GoCodeRequiredFieldsMissingFromReadManyInput": func(r *ackmodel.CRD, koVarName string, indentLevel int) string { - return code.CheckRequiredFieldsMissingFromShape(r, ackmodel.OpTypeList, koVarName, indentLevel) + return code.CheckRequiredFieldsMissingFromShape(r, acksdk.OpTypeList, koVarName, indentLevel) }, "GoCodeRequiredFieldsMissingFromGetAttributesInput": func(r *ackmodel.CRD, koVarName string, indentLevel int) string { - return code.CheckRequiredFieldsMissingFromShape(r, ackmodel.OpTypeGetAttributes, koVarName, indentLevel) + return code.CheckRequiredFieldsMissingFromShape(r, acksdk.OpTypeGetAttributes, koVarName, indentLevel) }, "GoCodeRequiredFieldsMissingFromSetAttributesInput": func(r *ackmodel.CRD, koVarName string, indentLevel int) string { - return code.CheckRequiredFieldsMissingFromShape(r, ackmodel.OpTypeSetAttributes, koVarName, indentLevel) + return code.CheckRequiredFieldsMissingFromShape(r, acksdk.OpTypeSetAttributes, koVarName, indentLevel) }, "GoCodeSetResourceIdentifiers": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { return code.SetResourceIdentifiers(r.Config(), r, sourceVarName, targetVarName, indentLevel) diff --git a/pkg/generate/code/check.go b/pkg/generate/code/check.go index 982b8b35..2b137e6e 100644 --- a/pkg/generate/code/check.go +++ b/pkg/generate/code/check.go @@ -21,6 +21,7 @@ import ( ackgenconfig "github.com/aws-controllers-k8s/code-generator/pkg/generate/config" "github.com/aws-controllers-k8s/code-generator/pkg/model" + "github.com/aws-controllers-k8s/code-generator/pkg/sdk" ) // CheckExceptionMessage returns Go code that contains a condition to @@ -65,21 +66,21 @@ func CheckExceptionMessage( // return r.ko.Spec.APIID == nil || r.ko.Status.RouteID == nil func CheckRequiredFieldsMissingFromShape( r *model.CRD, - opType model.OpType, + opType sdk.OpType, koVarName string, indentLevel int, ) string { var op *awssdkmodel.Operation switch opType { - case model.OpTypeGet: + case sdk.OpTypeGet: op = r.Ops.ReadOne - case model.OpTypeList: + case sdk.OpTypeList: op = r.Ops.ReadMany return checkRequiredFieldsMissingFromShapeReadMany( r, koVarName, indentLevel, op, op.InputRef.Shape) - case model.OpTypeGetAttributes: + case sdk.OpTypeGetAttributes: op = r.Ops.GetAttributes - case model.OpTypeSetAttributes: + case sdk.OpTypeSetAttributes: op = r.Ops.SetAttributes default: return "" @@ -192,5 +193,3 @@ func checkRequiredFieldsMissingFromShapeReadMany( result = fmt.Sprintf("%s == nil", resVarPath) return fmt.Sprintf("%sreturn %s\n", indent, result) } - - diff --git a/pkg/generate/code/check_test.go b/pkg/generate/code/check_test.go index 6c1ab8df..0bb73636 100644 --- a/pkg/generate/code/check_test.go +++ b/pkg/generate/code/check_test.go @@ -21,7 +21,7 @@ import ( "github.com/stretchr/testify/require" "github.com/aws-controllers-k8s/code-generator/pkg/generate/code" - "github.com/aws-controllers-k8s/code-generator/pkg/model" + "github.com/aws-controllers-k8s/code-generator/pkg/sdk" "github.com/aws-controllers-k8s/code-generator/pkg/testutil" ) @@ -47,7 +47,7 @@ func TestCheckRequiredFields_Attributes_ARNField(t *testing.T) { strings.TrimSpace(expReqFieldsInShape), strings.TrimSpace( code.CheckRequiredFieldsMissingFromShape( - crd, model.OpTypeGetAttributes, "ko", 1, + crd, sdk.OpTypeGetAttributes, "ko", 1, ), ), ) @@ -66,7 +66,7 @@ func TestCheckRequiredFields_Attributes_StatusField(t *testing.T) { return r.ko.Status.QueueURL == nil ` gotCode := code.CheckRequiredFieldsMissingFromShape( - crd, model.OpTypeGetAttributes, "r.ko", 1, + crd, sdk.OpTypeGetAttributes, "r.ko", 1, ) assert.Equal( strings.TrimSpace(expRequiredFieldsCode), @@ -87,7 +87,7 @@ func TestCheckRequiredFields_Attributes_StatusAndSpecField(t *testing.T) { return r.ko.Spec.APIID == nil || r.ko.Status.RouteID == nil ` gotCode := code.CheckRequiredFieldsMissingFromShape( - crd, model.OpTypeGet, "r.ko", 1, + crd, sdk.OpTypeGet, "r.ko", 1, ) assert.Equal( strings.TrimSpace(expRequiredFieldsCode), @@ -108,7 +108,7 @@ func TestCheckRequiredFields_RenamedSpecField(t *testing.T) { return r.ko.Spec.ClusterName == nil || r.ko.Spec.Name == nil ` gotCode := code.CheckRequiredFieldsMissingFromShape( - crd, model.OpTypeGet, "r.ko", 1, + crd, sdk.OpTypeGet, "r.ko", 1, ) assert.Equal( strings.TrimSpace(expRequiredFieldsCode), @@ -129,10 +129,10 @@ func TestCheckRequiredFields_StatusField_ReadMany(t *testing.T) { return r.ko.Status.VPCID == nil ` gotCode := code.CheckRequiredFieldsMissingFromShape( - crd, model.OpTypeList, "r.ko", 1, + crd, sdk.OpTypeList, "r.ko", 1, ) assert.Equal( strings.TrimSpace(expRequiredFieldsCode), strings.TrimSpace(gotCode), ) -} \ No newline at end of file +} diff --git a/pkg/generate/code/set_resource.go b/pkg/generate/code/set_resource.go index c8d8b911..dbd07871 100644 --- a/pkg/generate/code/set_resource.go +++ b/pkg/generate/code/set_resource.go @@ -23,6 +23,7 @@ import ( ackgenconfig "github.com/aws-controllers-k8s/code-generator/pkg/generate/config" "github.com/aws-controllers-k8s/code-generator/pkg/model" "github.com/aws-controllers-k8s/code-generator/pkg/names" + "github.com/aws-controllers-k8s/code-generator/pkg/sdk" "github.com/aws-controllers-k8s/code-generator/pkg/util" ) @@ -75,7 +76,7 @@ func SetResource( cfg *ackgenconfig.Config, r *model.CRD, // The type of operation to look for the Output shape - opType model.OpType, + opType sdk.OpType, // String representing the name of the variable that we will grab the // Output shape from. This will likely be "resp" since in the templates // that call this method, the "source variable" is the response struct @@ -91,18 +92,18 @@ func SetResource( ) string { var op *awssdkmodel.Operation switch opType { - case model.OpTypeCreate: + case sdk.OpTypeCreate: op = r.Ops.Create - case model.OpTypeGet: + case sdk.OpTypeGet: op = r.Ops.ReadOne - case model.OpTypeList: + case sdk.OpTypeList: return setResourceReadMany( cfg, r, r.Ops.ReadMany, sourceVarName, targetVarName, indentLevel, ) - case model.OpTypeUpdate: + case sdk.OpTypeUpdate: op = r.Ops.Update - case model.OpTypeDelete: + case sdk.OpTypeDelete: op = r.Ops.Delete default: return "" diff --git a/pkg/generate/code/set_resource_test.go b/pkg/generate/code/set_resource_test.go index dd37ba7f..5333452b 100644 --- a/pkg/generate/code/set_resource_test.go +++ b/pkg/generate/code/set_resource_test.go @@ -20,7 +20,7 @@ import ( "github.com/stretchr/testify/require" "github.com/aws-controllers-k8s/code-generator/pkg/generate/code" - "github.com/aws-controllers-k8s/code-generator/pkg/model" + "github.com/aws-controllers-k8s/code-generator/pkg/sdk" "github.com/aws-controllers-k8s/code-generator/pkg/testutil" ) @@ -122,7 +122,7 @@ func TestSetResource_APIGWv2_Route_Create(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, model.OpTypeCreate, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, sdk.OpTypeCreate, "resp", "ko", 1), ) } @@ -224,7 +224,7 @@ func TestSetResource_APIGWv2_Route_ReadOne(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, model.OpTypeGet, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, sdk.OpTypeGet, "resp", "ko", 1), ) } @@ -278,7 +278,7 @@ func TestSetResource_DynamoDB_Backup_ReadOne(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, model.OpTypeGet, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, sdk.OpTypeGet, "resp", "ko", 1), ) } @@ -304,7 +304,7 @@ func TestSetResource_CodeDeploy_Deployment_Create(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, model.OpTypeCreate, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, sdk.OpTypeCreate, "resp", "ko", 1), ) } @@ -652,7 +652,7 @@ func TestSetResource_DynamoDB_Table_ReadOne(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, model.OpTypeGet, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, sdk.OpTypeGet, "resp", "ko", 1), ) } @@ -718,7 +718,7 @@ func TestSetResource_EC2_LaunchTemplate_Create(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, model.OpTypeCreate, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, sdk.OpTypeCreate, "resp", "ko", 1), ) } @@ -779,7 +779,7 @@ func TestSetResource_ECR_Repository_Create(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, model.OpTypeCreate, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, sdk.OpTypeCreate, "resp", "ko", 1), ) } @@ -855,7 +855,7 @@ func TestSetResource_ECR_Repository_ReadMany(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, model.OpTypeList, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, sdk.OpTypeList, "resp", "ko", 1), ) } @@ -1203,7 +1203,7 @@ func TestSetResource_Elasticache_ReplicationGroup_Create(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, model.OpTypeCreate, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, sdk.OpTypeCreate, "resp", "ko", 1), ) } @@ -1559,7 +1559,7 @@ func TestSetResource_Elasticache_ReplicationGroup_ReadMany(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, model.OpTypeList, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, sdk.OpTypeList, "resp", "ko", 1), ) } @@ -2113,7 +2113,7 @@ func TestSetResource_RDS_DBInstance_Create(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, model.OpTypeCreate, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, sdk.OpTypeCreate, "resp", "ko", 1), ) } @@ -2678,7 +2678,7 @@ func TestSetResource_RDS_DBInstance_ReadMany(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, model.OpTypeList, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, sdk.OpTypeList, "resp", "ko", 1), ) } @@ -2700,7 +2700,7 @@ func TestSetResource_S3_Bucket_Create(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, model.OpTypeCreate, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, sdk.OpTypeCreate, "resp", "ko", 1), ) } @@ -2735,7 +2735,7 @@ func TestSetResource_S3_Bucket_ReadMany(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, model.OpTypeList, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, sdk.OpTypeList, "resp", "ko", 1), ) } @@ -2765,7 +2765,7 @@ func TestSetResource_SNS_Topic_Create(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, model.OpTypeCreate, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, sdk.OpTypeCreate, "resp", "ko", 1), ) } @@ -2819,7 +2819,7 @@ func TestSetResource_SQS_Queue_Create(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, model.OpTypeCreate, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, sdk.OpTypeCreate, "resp", "ko", 1), ) } @@ -2934,7 +2934,7 @@ func TestSetResource_RDS_DBSubnetGroup_ReadMany(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, model.OpTypeList, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, sdk.OpTypeList, "resp", "ko", 1), ) } diff --git a/pkg/generate/code/set_sdk.go b/pkg/generate/code/set_sdk.go index 551b5358..31ea12fe 100644 --- a/pkg/generate/code/set_sdk.go +++ b/pkg/generate/code/set_sdk.go @@ -23,6 +23,7 @@ import ( ackgenconfig "github.com/aws-controllers-k8s/code-generator/pkg/generate/config" "github.com/aws-controllers-k8s/code-generator/pkg/model" "github.com/aws-controllers-k8s/code-generator/pkg/names" + "github.com/aws-controllers-k8s/code-generator/pkg/sdk" ) // SetSDK returns the Go code that sets an SDK input shape's member fields from @@ -76,7 +77,7 @@ func SetSDK( cfg *ackgenconfig.Config, r *model.CRD, // The type of operation to look for the Input shape - opType model.OpType, + opType sdk.OpType, // String representing the name of the variable that we will grab the Input // shape from. This will likely be "r.ko" since in the templates that call // this method, the "source variable" is the CRD struct which is used to @@ -92,17 +93,17 @@ func SetSDK( ) string { var op *awssdkmodel.Operation switch opType { - case model.OpTypeCreate: + case sdk.OpTypeCreate: op = r.Ops.Create - case model.OpTypeGet: + case sdk.OpTypeGet: op = r.Ops.ReadOne - case model.OpTypeList: + case sdk.OpTypeList: op = r.Ops.ReadMany return setSDKReadMany(cfg, r, op, sourceVarName, targetVarName, indentLevel) - case model.OpTypeUpdate: + case sdk.OpTypeUpdate: op = r.Ops.Update - case model.OpTypeDelete: + case sdk.OpTypeDelete: op = r.Ops.Delete default: return "" @@ -1246,7 +1247,7 @@ func varEmptyConstructorSDKType( indent := strings.Repeat("\t", indentLevel) goType := shape.GoTypeWithPkgName() keepPointer := (shape.Type == "list" || shape.Type == "map") - goType = model.ReplacePkgName(goType, r.SDKAPIPackageName(), "svcsdk", keepPointer) + goType = sdk.ReplacePkgName(goType, r.SDKAPIPackageName(), "svcsdk", keepPointer) switch shape.Type { case "structure": // f0 := &svcsdk.BookData{} @@ -1274,7 +1275,7 @@ func varEmptyConstructorK8sType( indent := strings.Repeat("\t", indentLevel) goType := shape.GoTypeWithPkgName() keepPointer := (shape.Type == "list" || shape.Type == "map") - goType = model.ReplacePkgName(goType, r.SDKAPIPackageName(), "svcapitypes", keepPointer) + goType = sdk.ReplacePkgName(goType, r.SDKAPIPackageName(), "svcapitypes", keepPointer) goTypeNoPkg := goType goPkg := "" hadPkg := false diff --git a/pkg/generate/code/set_sdk_test.go b/pkg/generate/code/set_sdk_test.go index 45fb7167..37230d91 100644 --- a/pkg/generate/code/set_sdk_test.go +++ b/pkg/generate/code/set_sdk_test.go @@ -20,7 +20,7 @@ import ( "github.com/stretchr/testify/require" "github.com/aws-controllers-k8s/code-generator/pkg/generate/code" - "github.com/aws-controllers-k8s/code-generator/pkg/model" + "github.com/aws-controllers-k8s/code-generator/pkg/sdk" "github.com/aws-controllers-k8s/code-generator/pkg/testutil" ) @@ -93,7 +93,7 @@ func TestSetSDK_APIGWv2_Route_Create(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, model.OpTypeCreate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, sdk.OpTypeCreate, "r.ko", "res", 1), ) } @@ -283,7 +283,7 @@ func TestSetSDK_DynamoDB_Table_Create(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, model.OpTypeCreate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, sdk.OpTypeCreate, "r.ko", "res", 1), ) } @@ -687,7 +687,7 @@ func TestSetSDK_EC2_LaunchTemplate_Create(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, model.OpTypeCreate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, sdk.OpTypeCreate, "r.ko", "res", 1), ) } @@ -735,7 +735,7 @@ func TestSetSDK_ECR_Repository_Create(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, model.OpTypeCreate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, sdk.OpTypeCreate, "r.ko", "res", 1), ) } @@ -968,7 +968,7 @@ func TestSetSDK_Elasticache_ReplicationGroup_Create(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, model.OpTypeCreate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, sdk.OpTypeCreate, "r.ko", "res", 1), ) } @@ -992,7 +992,7 @@ func TestSetSDK_Elasticache_ReplicationGroup_ReadMany(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, model.OpTypeList, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, sdk.OpTypeList, "r.ko", "res", 1), ) } @@ -1105,7 +1105,7 @@ func TestSetSDK_Elasticache_ReplicationGroup_Update_Override_Values(t *testing.T ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, model.OpTypeUpdate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, sdk.OpTypeUpdate, "r.ko", "res", 1), ) } @@ -1148,7 +1148,7 @@ func TestSetSDK_Elasticache_User_Create_Override_Values(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, model.OpTypeUpdate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, sdk.OpTypeUpdate, "r.ko", "res", 1), ) } @@ -1343,7 +1343,7 @@ func TestSetSDK_RDS_DBInstance_Create(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, model.OpTypeCreate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, sdk.OpTypeCreate, "r.ko", "res", 1), ) } @@ -1391,7 +1391,7 @@ func TestSetSDK_S3_Bucket_Create(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, model.OpTypeCreate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, sdk.OpTypeCreate, "r.ko", "res", 1), ) } @@ -1411,7 +1411,7 @@ func TestSetSDK_S3_Bucket_Delete(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, model.OpTypeDelete, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, sdk.OpTypeDelete, "r.ko", "res", 1), ) } @@ -1463,7 +1463,7 @@ func TestSetSDK_SNS_Topic_Create(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, model.OpTypeCreate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, sdk.OpTypeCreate, "r.ko", "res", 1), ) } @@ -1553,7 +1553,7 @@ func TestSetSDK_SQS_Queue_Create(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, model.OpTypeCreate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, sdk.OpTypeCreate, "r.ko", "res", 1), ) } @@ -1775,7 +1775,7 @@ func TestSetSDK_MQ_Broker_Create(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, model.OpTypeCreate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, sdk.OpTypeCreate, "r.ko", "res", 1), ) } @@ -1797,6 +1797,6 @@ func TestSetSDK_EC2_VPC_ReadMany(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, model.OpTypeList, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, sdk.OpTypeList, "r.ko", "res", 1), ) -} \ No newline at end of file +} diff --git a/pkg/generate/crossplane/crossplane.go b/pkg/generate/crossplane/crossplane.go index 622c3896..b29d5116 100644 --- a/pkg/generate/crossplane/crossplane.go +++ b/pkg/generate/crossplane/crossplane.go @@ -21,6 +21,7 @@ import ( "github.com/aws-controllers-k8s/code-generator/pkg/generate/code" "github.com/aws-controllers-k8s/code-generator/pkg/generate/templateset" ackmodel "github.com/aws-controllers-k8s/code-generator/pkg/model" + acksdk "github.com/aws-controllers-k8s/code-generator/pkg/sdk" "github.com/iancoleman/strcase" ) @@ -52,19 +53,19 @@ var ( return code.CheckExceptionMessage(r.Config(), r, httpStatusCode) }, "GoCodeSetReadOneOutput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetResource(r.Config(), r, ackmodel.OpTypeGet, sourceVarName, targetVarName, indentLevel) + return code.SetResource(r.Config(), r, acksdk.OpTypeGet, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetReadOneInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetSDK(r.Config(), r, ackmodel.OpTypeGet, sourceVarName, targetVarName, indentLevel) + return code.SetSDK(r.Config(), r, acksdk.OpTypeGet, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetReadManyOutput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetResource(r.Config(), r, ackmodel.OpTypeList, sourceVarName, targetVarName, indentLevel) + return code.SetResource(r.Config(), r, acksdk.OpTypeList, sourceVarName, targetVarName, indentLevel) }, "ListMemberNameInReadManyOutput": func(r *ackmodel.CRD) string { return code.ListMemberNameInReadManyOutput(r) }, "GoCodeSetReadManyInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetSDK(r.Config(), r, ackmodel.OpTypeList, sourceVarName, targetVarName, indentLevel) + return code.SetSDK(r.Config(), r, acksdk.OpTypeList, sourceVarName, targetVarName, indentLevel) }, "GoCodeGetAttributesSetInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { return code.SetSDKGetAttributes(r.Config(), r, sourceVarName, targetVarName, indentLevel) @@ -76,16 +77,16 @@ var ( return code.SetResourceGetAttributes(r.Config(), r, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetCreateOutput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetResource(r.Config(), r, ackmodel.OpTypeCreate, sourceVarName, targetVarName, indentLevel) + return code.SetResource(r.Config(), r, acksdk.OpTypeCreate, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetCreateInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetSDK(r.Config(), r, ackmodel.OpTypeCreate, sourceVarName, targetVarName, indentLevel) + return code.SetSDK(r.Config(), r, acksdk.OpTypeCreate, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetUpdateInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetSDK(r.Config(), r, ackmodel.OpTypeUpdate, sourceVarName, targetVarName, indentLevel) + return code.SetSDK(r.Config(), r, acksdk.OpTypeUpdate, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetDeleteInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetSDK(r.Config(), r, ackmodel.OpTypeDelete, sourceVarName, targetVarName, indentLevel) + return code.SetSDK(r.Config(), r, acksdk.OpTypeDelete, sourceVarName, targetVarName, indentLevel) }, "Empty": func(subject string) bool { return strings.TrimSpace(subject) == "" diff --git a/pkg/model/crd.go b/pkg/model/crd.go index 69c38dc5..5adbd97f 100644 --- a/pkg/model/crd.go +++ b/pkg/model/crd.go @@ -24,6 +24,7 @@ import ( ackgenconfig "github.com/aws-controllers-k8s/code-generator/pkg/generate/config" "github.com/aws-controllers-k8s/code-generator/pkg/names" + "github.com/aws-controllers-k8s/code-generator/pkg/sdk" "github.com/aws-controllers-k8s/code-generator/pkg/util" ) @@ -61,7 +62,7 @@ func (ops Ops) IterOps() []*awssdkmodel.Operation { // CRD describes a single top-level resource in an AWS service API type CRD struct { - sdkAPI *SDKAPI + sdkAPI *sdk.SDKAPI cfg *ackgenconfig.Config Names names.Names Kind string @@ -472,7 +473,7 @@ func (r *CRD) GetOutputShape( wrapperOutputShape, err := r.getWrapperOutputShape(outputShape, *wrapperFieldPath) if err != nil { - msg := fmt.Sprintf("Unable to unwrap the output shape: %s " + + msg := fmt.Sprintf("Unable to unwrap the output shape: %s "+ "with field path override: %s. error: %v", outputShape.OrigShapeName, *wrapperFieldPath, err) panic(msg) @@ -506,7 +507,7 @@ func (r *CRD) getWrapperOutputShape( // wrapper field must be structure; otherwise cannot unpack if memberRef.Shape.Type != "structure" { return nil, fmt.Errorf( - "output wrapper overrides can only contain fields of type" + + "output wrapper overrides can only contain fields of type"+ " 'structure'. Found wrapper override field %s of type '%s'", wrapperField, memberRef.Shape.Type) } @@ -656,7 +657,7 @@ func (r *CRD) ListOpMatchFieldNames() []string { // GetAllRenames returns all the field renames observed in the generator config // for a given OpType. -func (r *CRD) GetAllRenames(op OpType) (map[string]string, error) { +func (r *CRD) GetAllRenames(op sdk.OpType) (map[string]string, error) { renames := make(map[string]string) resourceConfig, ok := r.cfg.Resources[r.Names.Original] if !ok { @@ -749,7 +750,7 @@ func (r *CRD) GetSanitizedMemberPath( // NewCRD returns a pointer to a new `ackmodel.CRD` struct that describes a // single top-level resource in an AWS service API func NewCRD( - sdkAPI *SDKAPI, + sdkAPI *sdk.SDKAPI, cfg *ackgenconfig.Config, crdNames names.Names, ops Ops, diff --git a/pkg/model/field.go b/pkg/model/field.go index b2ff75c1..3dd93007 100644 --- a/pkg/model/field.go +++ b/pkg/model/field.go @@ -18,6 +18,7 @@ import ( ackgenconfig "github.com/aws-controllers-k8s/code-generator/pkg/generate/config" "github.com/aws-controllers-k8s/code-generator/pkg/names" + acksdk "github.com/aws-controllers-k8s/code-generator/pkg/sdk" "github.com/aws-controllers-k8s/code-generator/pkg/util" awssdkmodel "github.com/aws/aws-sdk-go/private/model/api" ) @@ -96,7 +97,7 @@ func NewField( } if shape != nil { - gte, gt, gtwp = cleanGoType(crd.sdkAPI, crd.cfg, shape, cfg) + gte, gt, gtwp = acksdk.CleanGoType(crd.sdkAPI, crd.cfg, shape, cfg) } else { gte = "string" gt = "*string" diff --git a/pkg/model/model.go b/pkg/model/model.go index 38eed72c..121dce0a 100644 --- a/pkg/model/model.go +++ b/pkg/model/model.go @@ -22,6 +22,7 @@ import ( ackgenconfig "github.com/aws-controllers-k8s/code-generator/pkg/generate/config" "github.com/aws-controllers-k8s/code-generator/pkg/generate/templateset" "github.com/aws-controllers-k8s/code-generator/pkg/names" + "github.com/aws-controllers-k8s/code-generator/pkg/sdk" "github.com/aws-controllers-k8s/code-generator/pkg/util" awssdkmodel "github.com/aws/aws-sdk-go/private/model/api" ) @@ -34,7 +35,7 @@ var ( // Model contains the ACK model for the generator to process and apply // templates against. type Model struct { - SDKAPI *SDKAPI + SDKAPI *sdk.SDKAPI servicePackageName string apiVersion string crds []*CRD @@ -82,13 +83,13 @@ func (m *Model) GetCRDs() ([]*CRD, error) { opMap := m.SDKAPI.GetOperationMap(m.cfg) - createOps := (*opMap)[OpTypeCreate] - readOneOps := (*opMap)[OpTypeGet] - readManyOps := (*opMap)[OpTypeList] - updateOps := (*opMap)[OpTypeUpdate] - deleteOps := (*opMap)[OpTypeDelete] - getAttributesOps := (*opMap)[OpTypeGetAttributes] - setAttributesOps := (*opMap)[OpTypeSetAttributes] + createOps := (*opMap)[sdk.OpTypeCreate] + readOneOps := (*opMap)[sdk.OpTypeGet] + readManyOps := (*opMap)[sdk.OpTypeList] + updateOps := (*opMap)[sdk.OpTypeUpdate] + deleteOps := (*opMap)[sdk.OpTypeDelete] + getAttributesOps := (*opMap)[sdk.OpTypeGetAttributes] + setAttributesOps := (*opMap)[sdk.OpTypeSetAttributes] for crdName, createOp := range createOps { if m.cfg.IsIgnoredResource(crdName) { @@ -309,7 +310,7 @@ func (m *Model) GetTypeDefs() ([]*TypeDef, error) { } tdefNames := names.New(shapeName) if m.SDKAPI.HasConflictingTypeName(shapeName, m.cfg) { - tdefNames.Camel += ConflictingNameSuffix + tdefNames.Camel += sdk.ConflictingNameSuffix trenames[shapeName] = tdefNames.Camel } @@ -365,7 +366,7 @@ func (m *Model) getShapeCleanGoType(shape *awssdkmodel.Shape) string { goType := shape.GoType() typeNames := names.New(goType) if m.SDKAPI.HasConflictingTypeName(goType, m.cfg) { - typeNames.Camel += ConflictingNameSuffix + typeNames.Camel += sdk.ConflictingNameSuffix } return "*" + typeNames.Camel default: @@ -641,7 +642,7 @@ func (m *Model) GetEnumDefs() ([]*EnumDef, error) { // Handle name conflicts with top-level CRD.Spec or CRD.Status // types if m.SDKAPI.HasConflictingTypeName(shapeName, m.cfg) { - enumNames.Camel += ConflictingNameSuffix + enumNames.Camel += sdk.ConflictingNameSuffix } edef, err := NewEnumDef(enumNames, shape.Enum) if err != nil { @@ -695,8 +696,8 @@ func (m *Model) GetConfig() *ackgenconfig.Config { // e.g. "sns.services.k8s.aws" func (m *Model) APIGroup() string { suffix := "services.k8s.aws" - if m.SDKAPI.apiGroupSuffix != "" { - suffix = m.SDKAPI.apiGroupSuffix + if m.SDKAPI.APIGroupSuffix != "" { + suffix = m.SDKAPI.APIGroupSuffix } return fmt.Sprintf("%s.%s", m.servicePackageName, suffix) } @@ -705,7 +706,7 @@ func (m *Model) APIGroup() string { // Optionally, pass a file path to a generator config file that can be used to // instruct the code generator how to handle the API properly func New( - SDKAPI *SDKAPI, + SDKAPI *sdk.SDKAPI, servicePackageName string, apiVersion string, cfg ackgenconfig.Config, diff --git a/pkg/model/multiversion/delta.go b/pkg/model/multiversion/delta.go index 865e9b1c..427c50be 100644 --- a/pkg/model/multiversion/delta.go +++ b/pkg/model/multiversion/delta.go @@ -20,6 +20,7 @@ import ( awssdkmodel "github.com/aws/aws-sdk-go/private/model/api" ackmodel "github.com/aws-controllers-k8s/code-generator/pkg/model" + acksdk "github.com/aws-controllers-k8s/code-generator/pkg/sdk" ) // FieldChangeType represents the type of field modification. @@ -69,12 +70,12 @@ type CRDDelta struct { // spec and status fields deltas. src is the CRD of the spoke (source) version // and dst is the CRD of the hub (destination) version. func ComputeCRDFieldDeltas(src, dst *ackmodel.CRD) (*CRDDelta, error) { - dstRenames, err := dst.GetAllRenames(ackmodel.OpTypeCreate) + dstRenames, err := dst.GetAllRenames(acksdk.OpTypeCreate) if err != nil { return nil, fmt.Errorf("cannot get resource field renames: %s", err) } - srcRenames, err := src.GetAllRenames(ackmodel.OpTypeCreate) + srcRenames, err := src.GetAllRenames(acksdk.OpTypeCreate) if err != nil { return nil, fmt.Errorf("cannot get resource field renames: %s", err) } diff --git a/pkg/model/multiversion/delta_test.go b/pkg/model/multiversion/delta_test.go index 8043af06..b47c9534 100644 --- a/pkg/model/multiversion/delta_test.go +++ b/pkg/model/multiversion/delta_test.go @@ -21,8 +21,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - ackmodel "github.com/aws-controllers-k8s/code-generator/pkg/model" "github.com/aws-controllers-k8s/code-generator/pkg/model/multiversion" + acksdk "github.com/aws-controllers-k8s/code-generator/pkg/sdk" "github.com/aws-controllers-k8s/code-generator/pkg/testutil" ) @@ -385,9 +385,9 @@ func TestComputeFieldsDiff_ECR(t *testing.T) { field.ShapeRef.Shape = newEmptyStructShape(tt.args.src.mutateShape) } - srcRenames, err := srcCRD.GetAllRenames(ackmodel.OpTypeCreate) + srcRenames, err := srcCRD.GetAllRenames(acksdk.OpTypeCreate) require.Nil(err) - dstRenames, err := dstCRD.GetAllRenames(ackmodel.OpTypeCreate) + dstRenames, err := dstCRD.GetAllRenames(acksdk.OpTypeCreate) require.Nil(err) renames, err := multiversion.ComputeRenamesDelta(srcRenames, dstRenames) require.Nil(err) diff --git a/pkg/model/multiversion/manager.go b/pkg/model/multiversion/manager.go index b9236736..b1c1e6f7 100644 --- a/pkg/model/multiversion/manager.go +++ b/pkg/model/multiversion/manager.go @@ -23,6 +23,7 @@ import ( ackgenconfig "github.com/aws-controllers-k8s/code-generator/pkg/generate/config" ackmetadata "github.com/aws-controllers-k8s/code-generator/pkg/metadata" ackmodel "github.com/aws-controllers-k8s/code-generator/pkg/model" + acksdk "github.com/aws-controllers-k8s/code-generator/pkg/sdk" "github.com/aws-controllers-k8s/code-generator/pkg/util" ) @@ -71,7 +72,7 @@ func NewAPIVersionManager( return nil, fmt.Errorf("cannot read sdk git repository: %v", err) } - SDKAPIHelper := ackmodel.NewSDKHelper(sdkCacheDir) + SDKAPIHelper := acksdk.NewSDKHelper(sdkCacheDir) // create model for each non-deprecated api version models := map[string]*ackmodel.Model{} diff --git a/pkg/model/type_def.go b/pkg/model/type_def.go index c23096d3..fb97563a 100644 --- a/pkg/model/type_def.go +++ b/pkg/model/type_def.go @@ -19,13 +19,6 @@ import ( "github.com/aws-controllers-k8s/code-generator/pkg/names" ) -const ( - // ConflictingNameSuffix is appended to type names when they overlap with - // well-known common struct names for things like a CRD itself, or its - // Spec/Status subfield struct type name. - ConflictingNameSuffix = "_SDK" -) - // TypeDef is a Go type definition for structs that are member fields of the // Spec or Status structs in Custom Resource Definitions (CRDs). type TypeDef struct { diff --git a/pkg/model/op.go b/pkg/sdk/op.go similarity index 99% rename from pkg/model/op.go rename to pkg/sdk/op.go index 8a54917e..d858aa9e 100644 --- a/pkg/model/op.go +++ b/pkg/sdk/op.go @@ -11,7 +11,7 @@ // express or implied. See the License for the specific language governing // permissions and limitations under the License. -package model +package sdk import ( "strings" diff --git a/pkg/model/op_test.go b/pkg/sdk/op_test.go similarity index 87% rename from pkg/model/op_test.go rename to pkg/sdk/op_test.go index 5eca215f..29fe1205 100644 --- a/pkg/model/op_test.go +++ b/pkg/sdk/op_test.go @@ -11,7 +11,7 @@ // express or implied. See the License for the specific language governing // permissions and limitations under the License. -package model_test +package sdk_test import ( "testing" @@ -29,82 +29,82 @@ func TestGetOpTypeAndResourceNameFromOpID(t *testing.T) { tests := []struct { opID string - expOpType model.OpType + expOpType sdk.OpType expResName string }{ { "CreateTopic", - model.OpTypeCreate, + sdk.OpTypeCreate, "Topic", }, { "CreateOrUpdateTopic", - model.OpTypeReplace, + sdk.OpTypeReplace, "Topic", }, { "CreateBatchTopics", - model.OpTypeCreateBatch, + sdk.OpTypeCreateBatch, "Topic", }, { "CreateBatchTopic", - model.OpTypeCreateBatch, + sdk.OpTypeCreateBatch, "Topic", }, { "BatchCreateTopics", - model.OpTypeCreateBatch, + sdk.OpTypeCreateBatch, "Topic", }, { "BatchCreateTopic", - model.OpTypeCreateBatch, + sdk.OpTypeCreateBatch, "Topic", }, { "CreateTopics", - model.OpTypeCreateBatch, + sdk.OpTypeCreateBatch, "Topic", }, { "DescribeEC2Instances", - model.OpTypeList, + sdk.OpTypeList, "EC2Instance", }, { "DescribeEC2Instance", - model.OpTypeGet, + sdk.OpTypeGet, "EC2Instance", }, { "UpdateTopic", - model.OpTypeUpdate, + sdk.OpTypeUpdate, "Topic", }, { "DeleteTopic", - model.OpTypeDelete, + sdk.OpTypeDelete, "Topic", }, { "DescribeInstances", - model.OpTypeList, + sdk.OpTypeList, "Instance", }, { "ListDeploymentGroups", - model.OpTypeList, + sdk.OpTypeList, "DeploymentGroup", }, { "GetDeployment", - model.OpTypeGet, + sdk.OpTypeGet, "Deployment", }, { "PauseEC2Instance", - model.OpTypeUnknown, + sdk.OpTypeUnknown, "PauseEC2Instance", }, // Heuristic should incorrectly parse DhcpOptions ops diff --git a/pkg/model/sdk_helper.go b/pkg/sdk/sdk_helper.go similarity index 98% rename from pkg/model/sdk_helper.go rename to pkg/sdk/sdk_helper.go index 391a532f..2b85ca5a 100644 --- a/pkg/model/sdk_helper.go +++ b/pkg/sdk/sdk_helper.go @@ -11,7 +11,7 @@ // express or implied. See the License for the specific language governing // permissions and limitations under the License. -package model +package sdk import ( "errors" @@ -112,7 +112,7 @@ func (h *SDKHelper) API(serviceModelName string) (*SDKAPI, error) { // Calling API.ServicePackageDoc() ends up resetting the API.imports // unexported map variable... _ = api.ServicePackageDoc() - return &SDKAPI{api, nil, nil, h.APIGroupSuffix}, nil + return &SDKAPI{api, h.APIGroupSuffix, nil, nil}, nil } return nil, ErrServiceNotFound } @@ -176,7 +176,8 @@ func (h *SDKHelper) GetAPIVersions(serviceModelName string) ([]string, error) { // SDKAPI contains an API model for a single AWS service API type SDKAPI struct { - API *awssdkmodel.API + API *awssdkmodel.API + APIGroupSuffix string // A map of operation type and resource name to // aws-sdk-go/private/model/api.Operation structs opMap *OperationMap @@ -184,7 +185,6 @@ type SDKAPI struct { // renamed type name (due to conflicting names) typeRenames map[string]string // Default is "services.k8s.aws" - apiGroupSuffix string } // GetPayloads returns a slice of strings of Shape names representing input and diff --git a/pkg/model/sdk_helper_test.go b/pkg/sdk/sdk_helper_test.go similarity index 94% rename from pkg/model/sdk_helper_test.go rename to pkg/sdk/sdk_helper_test.go index dc61e764..d14d2164 100644 --- a/pkg/model/sdk_helper_test.go +++ b/pkg/sdk/sdk_helper_test.go @@ -11,7 +11,7 @@ // express or implied. See the License for the specific language governing // permissions and limitations under the License. -package model_test +package sdk_test import ( "path/filepath" @@ -20,19 +20,19 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/aws-controllers-k8s/code-generator/pkg/model" + "github.com/aws-controllers-k8s/code-generator/pkg/sdk" ) var ( - lambda *model.SDKAPI + lambda *sdk.SDKAPI ) -func lambdaSDKAPI(t *testing.T) *model.SDKAPI { +func lambdaSDKAPI(t *testing.T) *sdk.SDKAPI { if lambda != nil { return lambda } path := filepath.Clean("../testdata") - sdkHelper := model.NewSDKHelper(path) + sdkHelper := sdk.NewSDKHelper(path) lambda, err := sdkHelper.API("lambda") if err != nil { t.Fatal(err) diff --git a/pkg/model/types.go b/pkg/sdk/types.go similarity index 93% rename from pkg/model/types.go rename to pkg/sdk/types.go index a23ec8f3..786d07b2 100644 --- a/pkg/model/types.go +++ b/pkg/sdk/types.go @@ -11,7 +11,7 @@ // express or implied. See the License for the specific language governing // permissions and limitations under the License. -package model +package sdk import ( "strings" @@ -22,10 +22,17 @@ import ( "github.com/aws-controllers-k8s/code-generator/pkg/names" ) -// cleanGoType returns a tuple of three strings representing the normalized Go +const ( + // ConflictingNameSuffix is appended to type names when they overlap with + // well-known common struct names for things like a CRD itself, or its + // Spec/Status subfield struct type name. + ConflictingNameSuffix = "_SDK" +) + +// CleanGoType returns a tuple of three strings representing the normalized Go // types in "element", "normal" and "with package name" format for a particular // Shape. -func cleanGoType( +func CleanGoType( api *SDKAPI, cfg *ackgenconfig.Config, shape *awssdkmodel.Shape, @@ -49,7 +56,7 @@ func cleanGoType( } else if shape.Type == "list" { // If it's a list type, where the element is a structure, we need to // set the GoType to the cleaned-up Camel-cased name - mgte, mgt, mgtwp := cleanGoType(api, cfg, shape.MemberRef.Shape, fieldCfg) + mgte, mgt, mgtwp := CleanGoType(api, cfg, shape.MemberRef.Shape, fieldCfg) cleanNames := names.New(mgte) gte = cleanNames.Camel if api.HasConflictingTypeName(mgte, cfg) { diff --git a/pkg/model/types_test.go b/pkg/sdk/types_test.go similarity index 91% rename from pkg/model/types_test.go rename to pkg/sdk/types_test.go index f2adb17d..9a0d7475 100644 --- a/pkg/model/types_test.go +++ b/pkg/sdk/types_test.go @@ -1,11 +1,10 @@ -package model_test +package sdk_test import ( "testing" + "github.com/aws-controllers-k8s/code-generator/pkg/sdk" "github.com/stretchr/testify/assert" - - "github.com/aws-controllers-k8s/code-generator/pkg/model" ) func TestReplacePkgName(t *testing.T) { @@ -69,7 +68,7 @@ func TestReplacePkgName(t *testing.T) { } for _, tc := range testCases { - result := model.ReplacePkgName( + result := sdk.ReplacePkgName( tc.subject, tc.pkgName, tc.replacePkgAlias, diff --git a/pkg/testutil/schema_helper.go b/pkg/testutil/schema_helper.go index 28d4f59a..a1c9b57d 100644 --- a/pkg/testutil/schema_helper.go +++ b/pkg/testutil/schema_helper.go @@ -21,8 +21,8 @@ import ( ackgenerate "github.com/aws-controllers-k8s/code-generator/pkg/generate/ack" ackgenconfig "github.com/aws-controllers-k8s/code-generator/pkg/generate/config" - "github.com/aws-controllers-k8s/code-generator/pkg/model" ackmodel "github.com/aws-controllers-k8s/code-generator/pkg/model" + acksdk "github.com/aws-controllers-k8s/code-generator/pkg/sdk" ) // TestingModelOptions contains optional variables that are passed to @@ -73,7 +73,7 @@ func NewModelForServiceWithOptions(t *testing.T, servicePackageName string, opti } } options.SetDefaults() - sdkHelper := model.NewSDKHelper(path) + sdkHelper := acksdk.NewSDKHelper(path) sdkHelper.WithAPIVersion(options.ServiceAPIVersion) sdkAPI, err := sdkHelper.API(servicePackageName) if err != nil { From 64b7daced55fcae073c525d0733b0f8542aa7397 Mon Sep 17 00:00:00 2001 From: Nicholas Thomson Date: Tue, 12 Oct 2021 13:37:27 -0700 Subject: [PATCH 2/7] Move types back to Model --- pkg/generate/code/set_sdk.go | 4 ++-- pkg/model/field.go | 3 +-- pkg/{sdk => model}/types.go | 12 +++--------- pkg/{sdk => model}/types_test.go | 6 +++--- pkg/sdk/sdk_helper.go | 7 +++++++ 5 files changed, 16 insertions(+), 16 deletions(-) rename pkg/{sdk => model}/types.go (95%) rename pkg/{sdk => model}/types_test.go (91%) diff --git a/pkg/generate/code/set_sdk.go b/pkg/generate/code/set_sdk.go index 31ea12fe..6a1f5e61 100644 --- a/pkg/generate/code/set_sdk.go +++ b/pkg/generate/code/set_sdk.go @@ -1247,7 +1247,7 @@ func varEmptyConstructorSDKType( indent := strings.Repeat("\t", indentLevel) goType := shape.GoTypeWithPkgName() keepPointer := (shape.Type == "list" || shape.Type == "map") - goType = sdk.ReplacePkgName(goType, r.SDKAPIPackageName(), "svcsdk", keepPointer) + goType = model.ReplacePkgName(goType, r.SDKAPIPackageName(), "svcsdk", keepPointer) switch shape.Type { case "structure": // f0 := &svcsdk.BookData{} @@ -1275,7 +1275,7 @@ func varEmptyConstructorK8sType( indent := strings.Repeat("\t", indentLevel) goType := shape.GoTypeWithPkgName() keepPointer := (shape.Type == "list" || shape.Type == "map") - goType = sdk.ReplacePkgName(goType, r.SDKAPIPackageName(), "svcapitypes", keepPointer) + goType = model.ReplacePkgName(goType, r.SDKAPIPackageName(), "svcapitypes", keepPointer) goTypeNoPkg := goType goPkg := "" hadPkg := false diff --git a/pkg/model/field.go b/pkg/model/field.go index 3dd93007..63e6f4ad 100644 --- a/pkg/model/field.go +++ b/pkg/model/field.go @@ -18,7 +18,6 @@ import ( ackgenconfig "github.com/aws-controllers-k8s/code-generator/pkg/generate/config" "github.com/aws-controllers-k8s/code-generator/pkg/names" - acksdk "github.com/aws-controllers-k8s/code-generator/pkg/sdk" "github.com/aws-controllers-k8s/code-generator/pkg/util" awssdkmodel "github.com/aws/aws-sdk-go/private/model/api" ) @@ -97,7 +96,7 @@ func NewField( } if shape != nil { - gte, gt, gtwp = acksdk.CleanGoType(crd.sdkAPI, crd.cfg, shape, cfg) + gte, gt, gtwp = CleanGoType(crd.sdkAPI, crd.cfg, shape, cfg) } else { gte = "string" gt = "*string" diff --git a/pkg/sdk/types.go b/pkg/model/types.go similarity index 95% rename from pkg/sdk/types.go rename to pkg/model/types.go index 786d07b2..af435004 100644 --- a/pkg/sdk/types.go +++ b/pkg/model/types.go @@ -11,7 +11,7 @@ // express or implied. See the License for the specific language governing // permissions and limitations under the License. -package sdk +package model import ( "strings" @@ -20,20 +20,14 @@ import ( ackgenconfig "github.com/aws-controllers-k8s/code-generator/pkg/generate/config" "github.com/aws-controllers-k8s/code-generator/pkg/names" -) - -const ( - // ConflictingNameSuffix is appended to type names when they overlap with - // well-known common struct names for things like a CRD itself, or its - // Spec/Status subfield struct type name. - ConflictingNameSuffix = "_SDK" + "github.com/aws-controllers-k8s/code-generator/pkg/sdk" ) // CleanGoType returns a tuple of three strings representing the normalized Go // types in "element", "normal" and "with package name" format for a particular // Shape. func CleanGoType( - api *SDKAPI, + api *sdk.SDKAPI, cfg *ackgenconfig.Config, shape *awssdkmodel.Shape, fieldCfg *ackgenconfig.FieldConfig, diff --git a/pkg/sdk/types_test.go b/pkg/model/types_test.go similarity index 91% rename from pkg/sdk/types_test.go rename to pkg/model/types_test.go index 9a0d7475..9c7bb6d8 100644 --- a/pkg/sdk/types_test.go +++ b/pkg/model/types_test.go @@ -1,9 +1,9 @@ -package sdk_test +package model_test import ( "testing" - "github.com/aws-controllers-k8s/code-generator/pkg/sdk" + "github.com/aws-controllers-k8s/code-generator/pkg/model" "github.com/stretchr/testify/assert" ) @@ -68,7 +68,7 @@ func TestReplacePkgName(t *testing.T) { } for _, tc := range testCases { - result := sdk.ReplacePkgName( + result := model.ReplacePkgName( tc.subject, tc.pkgName, tc.replacePkgAlias, diff --git a/pkg/sdk/sdk_helper.go b/pkg/sdk/sdk_helper.go index 2b85ca5a..a579375c 100644 --- a/pkg/sdk/sdk_helper.go +++ b/pkg/sdk/sdk_helper.go @@ -46,6 +46,13 @@ var ( ) ) +const ( + // ConflictingNameSuffix is appended to type names when they overlap with + // well-known common struct names for things like a CRD itself, or its + // Spec/Status subfield struct type name. + ConflictingNameSuffix = "_SDK" +) + // SDKHelper is a helper struct that helps work with the aws-sdk-go models and // API model loader type SDKHelper struct { From 7b5e6f8140547afdb4abbfa938fe27800971b5c4 Mon Sep 17 00:00:00 2001 From: Nicholas Thomson Date: Wed, 13 Oct 2021 14:13:55 -0700 Subject: [PATCH 3/7] Move SDK operations into operations package --- pkg/generate/ack/controller.go | 28 ++++++++++---------- pkg/generate/code/check.go | 12 ++++----- pkg/generate/code/check_test.go | 12 ++++----- pkg/generate/code/set_resource.go | 14 +++++----- pkg/generate/code/set_resource_test.go | 36 +++++++++++++------------- pkg/generate/code/set_sdk.go | 14 +++++----- pkg/generate/code/set_sdk_test.go | 32 +++++++++++------------ pkg/generate/crossplane/crossplane.go | 18 ++++++------- pkg/model/crd.go | 3 ++- pkg/model/model.go | 15 ++++++----- pkg/model/multiversion/delta.go | 6 ++--- pkg/model/multiversion/delta_test.go | 6 ++--- pkg/{sdk => operations}/op.go | 2 +- pkg/{sdk => operations}/op_test.go | 34 ++++++++++++------------ pkg/sdk/sdk_helper.go | 11 ++++---- 15 files changed, 123 insertions(+), 120 deletions(-) rename pkg/{sdk => operations}/op.go (99%) rename pkg/{sdk => operations}/op_test.go (85%) diff --git a/pkg/generate/ack/controller.go b/pkg/generate/ack/controller.go index fc24fe41..0960d134 100644 --- a/pkg/generate/ack/controller.go +++ b/pkg/generate/ack/controller.go @@ -22,7 +22,7 @@ import ( ackgenconfig "github.com/aws-controllers-k8s/code-generator/pkg/generate/config" "github.com/aws-controllers-k8s/code-generator/pkg/generate/templateset" ackmodel "github.com/aws-controllers-k8s/code-generator/pkg/model" - acksdk "github.com/aws-controllers-k8s/code-generator/pkg/sdk" + ackoperations "github.com/aws-controllers-k8s/code-generator/pkg/operations" awssdkmodel "github.com/aws/aws-sdk-go/private/model/api" ) @@ -61,16 +61,16 @@ var ( return code.CheckExceptionMessage(r.Config(), r, httpStatusCode) }, "GoCodeSetReadOneOutput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetResource(r.Config(), r, acksdk.OpTypeGet, sourceVarName, targetVarName, indentLevel) + return code.SetResource(r.Config(), r, ackoperations.OpTypeGet, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetReadOneInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetSDK(r.Config(), r, acksdk.OpTypeGet, sourceVarName, targetVarName, indentLevel) + return code.SetSDK(r.Config(), r, ackoperations.OpTypeGet, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetReadManyOutput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetResource(r.Config(), r, acksdk.OpTypeList, sourceVarName, targetVarName, indentLevel) + return code.SetResource(r.Config(), r, ackoperations.OpTypeList, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetReadManyInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetSDK(r.Config(), r, acksdk.OpTypeList, sourceVarName, targetVarName, indentLevel) + return code.SetSDK(r.Config(), r, ackoperations.OpTypeList, sourceVarName, targetVarName, indentLevel) }, "GoCodeGetAttributesSetInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { return code.SetSDKGetAttributes(r.Config(), r, sourceVarName, targetVarName, indentLevel) @@ -82,19 +82,19 @@ var ( return code.SetResourceGetAttributes(r.Config(), r, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetCreateOutput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetResource(r.Config(), r, acksdk.OpTypeCreate, sourceVarName, targetVarName, indentLevel) + return code.SetResource(r.Config(), r, ackoperations.OpTypeCreate, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetCreateInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetSDK(r.Config(), r, acksdk.OpTypeCreate, sourceVarName, targetVarName, indentLevel) + return code.SetSDK(r.Config(), r, ackoperations.OpTypeCreate, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetUpdateOutput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetResource(r.Config(), r, acksdk.OpTypeUpdate, sourceVarName, targetVarName, indentLevel) + return code.SetResource(r.Config(), r, ackoperations.OpTypeUpdate, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetUpdateInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetSDK(r.Config(), r, acksdk.OpTypeUpdate, sourceVarName, targetVarName, indentLevel) + return code.SetSDK(r.Config(), r, ackoperations.OpTypeUpdate, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetDeleteInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetSDK(r.Config(), r, acksdk.OpTypeDelete, sourceVarName, targetVarName, indentLevel) + return code.SetSDK(r.Config(), r, ackoperations.OpTypeDelete, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetSDKForStruct": func(r *ackmodel.CRD, targetFieldName string, targetVarName string, targetShapeRef *awssdkmodel.ShapeRef, sourceFieldPath string, sourceVarName string, indentLevel int) string { return code.SetSDKForStruct(r.Config(), r, targetFieldName, targetVarName, targetShapeRef, sourceFieldPath, sourceVarName, indentLevel) @@ -109,16 +109,16 @@ var ( return strings.TrimSpace(subject) == "" }, "GoCodeRequiredFieldsMissingFromReadOneInput": func(r *ackmodel.CRD, koVarName string, indentLevel int) string { - return code.CheckRequiredFieldsMissingFromShape(r, acksdk.OpTypeGet, koVarName, indentLevel) + return code.CheckRequiredFieldsMissingFromShape(r, ackoperations.OpTypeGet, koVarName, indentLevel) }, "GoCodeRequiredFieldsMissingFromReadManyInput": func(r *ackmodel.CRD, koVarName string, indentLevel int) string { - return code.CheckRequiredFieldsMissingFromShape(r, acksdk.OpTypeList, koVarName, indentLevel) + return code.CheckRequiredFieldsMissingFromShape(r, ackoperations.OpTypeList, koVarName, indentLevel) }, "GoCodeRequiredFieldsMissingFromGetAttributesInput": func(r *ackmodel.CRD, koVarName string, indentLevel int) string { - return code.CheckRequiredFieldsMissingFromShape(r, acksdk.OpTypeGetAttributes, koVarName, indentLevel) + return code.CheckRequiredFieldsMissingFromShape(r, ackoperations.OpTypeGetAttributes, koVarName, indentLevel) }, "GoCodeRequiredFieldsMissingFromSetAttributesInput": func(r *ackmodel.CRD, koVarName string, indentLevel int) string { - return code.CheckRequiredFieldsMissingFromShape(r, acksdk.OpTypeSetAttributes, koVarName, indentLevel) + return code.CheckRequiredFieldsMissingFromShape(r, ackoperations.OpTypeSetAttributes, koVarName, indentLevel) }, "GoCodeSetResourceIdentifiers": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { return code.SetResourceIdentifiers(r.Config(), r, sourceVarName, targetVarName, indentLevel) diff --git a/pkg/generate/code/check.go b/pkg/generate/code/check.go index 2b137e6e..14db3df9 100644 --- a/pkg/generate/code/check.go +++ b/pkg/generate/code/check.go @@ -21,7 +21,7 @@ import ( ackgenconfig "github.com/aws-controllers-k8s/code-generator/pkg/generate/config" "github.com/aws-controllers-k8s/code-generator/pkg/model" - "github.com/aws-controllers-k8s/code-generator/pkg/sdk" + "github.com/aws-controllers-k8s/code-generator/pkg/operations" ) // CheckExceptionMessage returns Go code that contains a condition to @@ -66,21 +66,21 @@ func CheckExceptionMessage( // return r.ko.Spec.APIID == nil || r.ko.Status.RouteID == nil func CheckRequiredFieldsMissingFromShape( r *model.CRD, - opType sdk.OpType, + opType operations.OpType, koVarName string, indentLevel int, ) string { var op *awssdkmodel.Operation switch opType { - case sdk.OpTypeGet: + case operations.OpTypeGet: op = r.Ops.ReadOne - case sdk.OpTypeList: + case operations.OpTypeList: op = r.Ops.ReadMany return checkRequiredFieldsMissingFromShapeReadMany( r, koVarName, indentLevel, op, op.InputRef.Shape) - case sdk.OpTypeGetAttributes: + case operations.OpTypeGetAttributes: op = r.Ops.GetAttributes - case sdk.OpTypeSetAttributes: + case operations.OpTypeSetAttributes: op = r.Ops.SetAttributes default: return "" diff --git a/pkg/generate/code/check_test.go b/pkg/generate/code/check_test.go index 0bb73636..26e6a5c8 100644 --- a/pkg/generate/code/check_test.go +++ b/pkg/generate/code/check_test.go @@ -21,7 +21,7 @@ import ( "github.com/stretchr/testify/require" "github.com/aws-controllers-k8s/code-generator/pkg/generate/code" - "github.com/aws-controllers-k8s/code-generator/pkg/sdk" + "github.com/aws-controllers-k8s/code-generator/pkg/operations" "github.com/aws-controllers-k8s/code-generator/pkg/testutil" ) @@ -47,7 +47,7 @@ func TestCheckRequiredFields_Attributes_ARNField(t *testing.T) { strings.TrimSpace(expReqFieldsInShape), strings.TrimSpace( code.CheckRequiredFieldsMissingFromShape( - crd, sdk.OpTypeGetAttributes, "ko", 1, + crd, operations.OpTypeGetAttributes, "ko", 1, ), ), ) @@ -66,7 +66,7 @@ func TestCheckRequiredFields_Attributes_StatusField(t *testing.T) { return r.ko.Status.QueueURL == nil ` gotCode := code.CheckRequiredFieldsMissingFromShape( - crd, sdk.OpTypeGetAttributes, "r.ko", 1, + crd, operations.OpTypeGetAttributes, "r.ko", 1, ) assert.Equal( strings.TrimSpace(expRequiredFieldsCode), @@ -87,7 +87,7 @@ func TestCheckRequiredFields_Attributes_StatusAndSpecField(t *testing.T) { return r.ko.Spec.APIID == nil || r.ko.Status.RouteID == nil ` gotCode := code.CheckRequiredFieldsMissingFromShape( - crd, sdk.OpTypeGet, "r.ko", 1, + crd, operations.OpTypeGet, "r.ko", 1, ) assert.Equal( strings.TrimSpace(expRequiredFieldsCode), @@ -108,7 +108,7 @@ func TestCheckRequiredFields_RenamedSpecField(t *testing.T) { return r.ko.Spec.ClusterName == nil || r.ko.Spec.Name == nil ` gotCode := code.CheckRequiredFieldsMissingFromShape( - crd, sdk.OpTypeGet, "r.ko", 1, + crd, operations.OpTypeGet, "r.ko", 1, ) assert.Equal( strings.TrimSpace(expRequiredFieldsCode), @@ -129,7 +129,7 @@ func TestCheckRequiredFields_StatusField_ReadMany(t *testing.T) { return r.ko.Status.VPCID == nil ` gotCode := code.CheckRequiredFieldsMissingFromShape( - crd, sdk.OpTypeList, "r.ko", 1, + crd, operations.OpTypeList, "r.ko", 1, ) assert.Equal( strings.TrimSpace(expRequiredFieldsCode), diff --git a/pkg/generate/code/set_resource.go b/pkg/generate/code/set_resource.go index dbd07871..8dae1d95 100644 --- a/pkg/generate/code/set_resource.go +++ b/pkg/generate/code/set_resource.go @@ -23,7 +23,7 @@ import ( ackgenconfig "github.com/aws-controllers-k8s/code-generator/pkg/generate/config" "github.com/aws-controllers-k8s/code-generator/pkg/model" "github.com/aws-controllers-k8s/code-generator/pkg/names" - "github.com/aws-controllers-k8s/code-generator/pkg/sdk" + "github.com/aws-controllers-k8s/code-generator/pkg/operations" "github.com/aws-controllers-k8s/code-generator/pkg/util" ) @@ -76,7 +76,7 @@ func SetResource( cfg *ackgenconfig.Config, r *model.CRD, // The type of operation to look for the Output shape - opType sdk.OpType, + opType operations.OpType, // String representing the name of the variable that we will grab the // Output shape from. This will likely be "resp" since in the templates // that call this method, the "source variable" is the response struct @@ -92,18 +92,18 @@ func SetResource( ) string { var op *awssdkmodel.Operation switch opType { - case sdk.OpTypeCreate: + case operations.OpTypeCreate: op = r.Ops.Create - case sdk.OpTypeGet: + case operations.OpTypeGet: op = r.Ops.ReadOne - case sdk.OpTypeList: + case operations.OpTypeList: return setResourceReadMany( cfg, r, r.Ops.ReadMany, sourceVarName, targetVarName, indentLevel, ) - case sdk.OpTypeUpdate: + case operations.OpTypeUpdate: op = r.Ops.Update - case sdk.OpTypeDelete: + case operations.OpTypeDelete: op = r.Ops.Delete default: return "" diff --git a/pkg/generate/code/set_resource_test.go b/pkg/generate/code/set_resource_test.go index 5333452b..48833bfa 100644 --- a/pkg/generate/code/set_resource_test.go +++ b/pkg/generate/code/set_resource_test.go @@ -20,7 +20,7 @@ import ( "github.com/stretchr/testify/require" "github.com/aws-controllers-k8s/code-generator/pkg/generate/code" - "github.com/aws-controllers-k8s/code-generator/pkg/sdk" + "github.com/aws-controllers-k8s/code-generator/pkg/operations" "github.com/aws-controllers-k8s/code-generator/pkg/testutil" ) @@ -122,7 +122,7 @@ func TestSetResource_APIGWv2_Route_Create(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, sdk.OpTypeCreate, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, operations.OpTypeCreate, "resp", "ko", 1), ) } @@ -224,7 +224,7 @@ func TestSetResource_APIGWv2_Route_ReadOne(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, sdk.OpTypeGet, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, operations.OpTypeGet, "resp", "ko", 1), ) } @@ -278,7 +278,7 @@ func TestSetResource_DynamoDB_Backup_ReadOne(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, sdk.OpTypeGet, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, operations.OpTypeGet, "resp", "ko", 1), ) } @@ -304,7 +304,7 @@ func TestSetResource_CodeDeploy_Deployment_Create(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, sdk.OpTypeCreate, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, operations.OpTypeCreate, "resp", "ko", 1), ) } @@ -652,7 +652,7 @@ func TestSetResource_DynamoDB_Table_ReadOne(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, sdk.OpTypeGet, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, operations.OpTypeGet, "resp", "ko", 1), ) } @@ -718,7 +718,7 @@ func TestSetResource_EC2_LaunchTemplate_Create(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, sdk.OpTypeCreate, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, operations.OpTypeCreate, "resp", "ko", 1), ) } @@ -779,7 +779,7 @@ func TestSetResource_ECR_Repository_Create(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, sdk.OpTypeCreate, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, operations.OpTypeCreate, "resp", "ko", 1), ) } @@ -855,7 +855,7 @@ func TestSetResource_ECR_Repository_ReadMany(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, sdk.OpTypeList, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, operations.OpTypeList, "resp", "ko", 1), ) } @@ -1203,7 +1203,7 @@ func TestSetResource_Elasticache_ReplicationGroup_Create(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, sdk.OpTypeCreate, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, operations.OpTypeCreate, "resp", "ko", 1), ) } @@ -1559,7 +1559,7 @@ func TestSetResource_Elasticache_ReplicationGroup_ReadMany(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, sdk.OpTypeList, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, operations.OpTypeList, "resp", "ko", 1), ) } @@ -2113,7 +2113,7 @@ func TestSetResource_RDS_DBInstance_Create(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, sdk.OpTypeCreate, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, operations.OpTypeCreate, "resp", "ko", 1), ) } @@ -2678,7 +2678,7 @@ func TestSetResource_RDS_DBInstance_ReadMany(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, sdk.OpTypeList, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, operations.OpTypeList, "resp", "ko", 1), ) } @@ -2700,7 +2700,7 @@ func TestSetResource_S3_Bucket_Create(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, sdk.OpTypeCreate, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, operations.OpTypeCreate, "resp", "ko", 1), ) } @@ -2735,7 +2735,7 @@ func TestSetResource_S3_Bucket_ReadMany(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, sdk.OpTypeList, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, operations.OpTypeList, "resp", "ko", 1), ) } @@ -2765,7 +2765,7 @@ func TestSetResource_SNS_Topic_Create(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, sdk.OpTypeCreate, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, operations.OpTypeCreate, "resp", "ko", 1), ) } @@ -2819,7 +2819,7 @@ func TestSetResource_SQS_Queue_Create(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, sdk.OpTypeCreate, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, operations.OpTypeCreate, "resp", "ko", 1), ) } @@ -2934,7 +2934,7 @@ func TestSetResource_RDS_DBSubnetGroup_ReadMany(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, sdk.OpTypeList, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, operations.OpTypeList, "resp", "ko", 1), ) } diff --git a/pkg/generate/code/set_sdk.go b/pkg/generate/code/set_sdk.go index 6a1f5e61..a0b2fffa 100644 --- a/pkg/generate/code/set_sdk.go +++ b/pkg/generate/code/set_sdk.go @@ -23,7 +23,7 @@ import ( ackgenconfig "github.com/aws-controllers-k8s/code-generator/pkg/generate/config" "github.com/aws-controllers-k8s/code-generator/pkg/model" "github.com/aws-controllers-k8s/code-generator/pkg/names" - "github.com/aws-controllers-k8s/code-generator/pkg/sdk" + "github.com/aws-controllers-k8s/code-generator/pkg/operations" ) // SetSDK returns the Go code that sets an SDK input shape's member fields from @@ -77,7 +77,7 @@ func SetSDK( cfg *ackgenconfig.Config, r *model.CRD, // The type of operation to look for the Input shape - opType sdk.OpType, + opType operations.OpType, // String representing the name of the variable that we will grab the Input // shape from. This will likely be "r.ko" since in the templates that call // this method, the "source variable" is the CRD struct which is used to @@ -93,17 +93,17 @@ func SetSDK( ) string { var op *awssdkmodel.Operation switch opType { - case sdk.OpTypeCreate: + case operations.OpTypeCreate: op = r.Ops.Create - case sdk.OpTypeGet: + case operations.OpTypeGet: op = r.Ops.ReadOne - case sdk.OpTypeList: + case operations.OpTypeList: op = r.Ops.ReadMany return setSDKReadMany(cfg, r, op, sourceVarName, targetVarName, indentLevel) - case sdk.OpTypeUpdate: + case operations.OpTypeUpdate: op = r.Ops.Update - case sdk.OpTypeDelete: + case operations.OpTypeDelete: op = r.Ops.Delete default: return "" diff --git a/pkg/generate/code/set_sdk_test.go b/pkg/generate/code/set_sdk_test.go index 37230d91..d720aa4f 100644 --- a/pkg/generate/code/set_sdk_test.go +++ b/pkg/generate/code/set_sdk_test.go @@ -20,7 +20,7 @@ import ( "github.com/stretchr/testify/require" "github.com/aws-controllers-k8s/code-generator/pkg/generate/code" - "github.com/aws-controllers-k8s/code-generator/pkg/sdk" + "github.com/aws-controllers-k8s/code-generator/pkg/operations" "github.com/aws-controllers-k8s/code-generator/pkg/testutil" ) @@ -93,7 +93,7 @@ func TestSetSDK_APIGWv2_Route_Create(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, sdk.OpTypeCreate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, operations.OpTypeCreate, "r.ko", "res", 1), ) } @@ -283,7 +283,7 @@ func TestSetSDK_DynamoDB_Table_Create(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, sdk.OpTypeCreate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, operations.OpTypeCreate, "r.ko", "res", 1), ) } @@ -687,7 +687,7 @@ func TestSetSDK_EC2_LaunchTemplate_Create(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, sdk.OpTypeCreate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, operations.OpTypeCreate, "r.ko", "res", 1), ) } @@ -735,7 +735,7 @@ func TestSetSDK_ECR_Repository_Create(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, sdk.OpTypeCreate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, operations.OpTypeCreate, "r.ko", "res", 1), ) } @@ -968,7 +968,7 @@ func TestSetSDK_Elasticache_ReplicationGroup_Create(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, sdk.OpTypeCreate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, operations.OpTypeCreate, "r.ko", "res", 1), ) } @@ -992,7 +992,7 @@ func TestSetSDK_Elasticache_ReplicationGroup_ReadMany(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, sdk.OpTypeList, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, operations.OpTypeList, "r.ko", "res", 1), ) } @@ -1105,7 +1105,7 @@ func TestSetSDK_Elasticache_ReplicationGroup_Update_Override_Values(t *testing.T ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, sdk.OpTypeUpdate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, operations.OpTypeUpdate, "r.ko", "res", 1), ) } @@ -1148,7 +1148,7 @@ func TestSetSDK_Elasticache_User_Create_Override_Values(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, sdk.OpTypeUpdate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, operations.OpTypeUpdate, "r.ko", "res", 1), ) } @@ -1343,7 +1343,7 @@ func TestSetSDK_RDS_DBInstance_Create(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, sdk.OpTypeCreate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, operations.OpTypeCreate, "r.ko", "res", 1), ) } @@ -1391,7 +1391,7 @@ func TestSetSDK_S3_Bucket_Create(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, sdk.OpTypeCreate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, operations.OpTypeCreate, "r.ko", "res", 1), ) } @@ -1411,7 +1411,7 @@ func TestSetSDK_S3_Bucket_Delete(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, sdk.OpTypeDelete, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, operations.OpTypeDelete, "r.ko", "res", 1), ) } @@ -1463,7 +1463,7 @@ func TestSetSDK_SNS_Topic_Create(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, sdk.OpTypeCreate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, operations.OpTypeCreate, "r.ko", "res", 1), ) } @@ -1553,7 +1553,7 @@ func TestSetSDK_SQS_Queue_Create(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, sdk.OpTypeCreate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, operations.OpTypeCreate, "r.ko", "res", 1), ) } @@ -1775,7 +1775,7 @@ func TestSetSDK_MQ_Broker_Create(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, sdk.OpTypeCreate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, operations.OpTypeCreate, "r.ko", "res", 1), ) } @@ -1797,6 +1797,6 @@ func TestSetSDK_EC2_VPC_ReadMany(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, sdk.OpTypeList, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, operations.OpTypeList, "r.ko", "res", 1), ) } diff --git a/pkg/generate/crossplane/crossplane.go b/pkg/generate/crossplane/crossplane.go index b29d5116..263164b8 100644 --- a/pkg/generate/crossplane/crossplane.go +++ b/pkg/generate/crossplane/crossplane.go @@ -21,7 +21,7 @@ import ( "github.com/aws-controllers-k8s/code-generator/pkg/generate/code" "github.com/aws-controllers-k8s/code-generator/pkg/generate/templateset" ackmodel "github.com/aws-controllers-k8s/code-generator/pkg/model" - acksdk "github.com/aws-controllers-k8s/code-generator/pkg/sdk" + ackoperations "github.com/aws-controllers-k8s/code-generator/pkg/operations" "github.com/iancoleman/strcase" ) @@ -53,19 +53,19 @@ var ( return code.CheckExceptionMessage(r.Config(), r, httpStatusCode) }, "GoCodeSetReadOneOutput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetResource(r.Config(), r, acksdk.OpTypeGet, sourceVarName, targetVarName, indentLevel) + return code.SetResource(r.Config(), r, ackoperations.OpTypeGet, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetReadOneInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetSDK(r.Config(), r, acksdk.OpTypeGet, sourceVarName, targetVarName, indentLevel) + return code.SetSDK(r.Config(), r, ackoperations.OpTypeGet, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetReadManyOutput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetResource(r.Config(), r, acksdk.OpTypeList, sourceVarName, targetVarName, indentLevel) + return code.SetResource(r.Config(), r, ackoperations.OpTypeList, sourceVarName, targetVarName, indentLevel) }, "ListMemberNameInReadManyOutput": func(r *ackmodel.CRD) string { return code.ListMemberNameInReadManyOutput(r) }, "GoCodeSetReadManyInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetSDK(r.Config(), r, acksdk.OpTypeList, sourceVarName, targetVarName, indentLevel) + return code.SetSDK(r.Config(), r, ackoperations.OpTypeList, sourceVarName, targetVarName, indentLevel) }, "GoCodeGetAttributesSetInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { return code.SetSDKGetAttributes(r.Config(), r, sourceVarName, targetVarName, indentLevel) @@ -77,16 +77,16 @@ var ( return code.SetResourceGetAttributes(r.Config(), r, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetCreateOutput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetResource(r.Config(), r, acksdk.OpTypeCreate, sourceVarName, targetVarName, indentLevel) + return code.SetResource(r.Config(), r, ackoperations.OpTypeCreate, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetCreateInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetSDK(r.Config(), r, acksdk.OpTypeCreate, sourceVarName, targetVarName, indentLevel) + return code.SetSDK(r.Config(), r, ackoperations.OpTypeCreate, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetUpdateInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetSDK(r.Config(), r, acksdk.OpTypeUpdate, sourceVarName, targetVarName, indentLevel) + return code.SetSDK(r.Config(), r, ackoperations.OpTypeUpdate, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetDeleteInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetSDK(r.Config(), r, acksdk.OpTypeDelete, sourceVarName, targetVarName, indentLevel) + return code.SetSDK(r.Config(), r, ackoperations.OpTypeDelete, sourceVarName, targetVarName, indentLevel) }, "Empty": func(subject string) bool { return strings.TrimSpace(subject) == "" diff --git a/pkg/model/crd.go b/pkg/model/crd.go index 5adbd97f..8c3911de 100644 --- a/pkg/model/crd.go +++ b/pkg/model/crd.go @@ -24,6 +24,7 @@ import ( ackgenconfig "github.com/aws-controllers-k8s/code-generator/pkg/generate/config" "github.com/aws-controllers-k8s/code-generator/pkg/names" + "github.com/aws-controllers-k8s/code-generator/pkg/operations" "github.com/aws-controllers-k8s/code-generator/pkg/sdk" "github.com/aws-controllers-k8s/code-generator/pkg/util" ) @@ -657,7 +658,7 @@ func (r *CRD) ListOpMatchFieldNames() []string { // GetAllRenames returns all the field renames observed in the generator config // for a given OpType. -func (r *CRD) GetAllRenames(op sdk.OpType) (map[string]string, error) { +func (r *CRD) GetAllRenames(op operations.OpType) (map[string]string, error) { renames := make(map[string]string) resourceConfig, ok := r.cfg.Resources[r.Names.Original] if !ok { diff --git a/pkg/model/model.go b/pkg/model/model.go index 121dce0a..f83e261a 100644 --- a/pkg/model/model.go +++ b/pkg/model/model.go @@ -22,6 +22,7 @@ import ( ackgenconfig "github.com/aws-controllers-k8s/code-generator/pkg/generate/config" "github.com/aws-controllers-k8s/code-generator/pkg/generate/templateset" "github.com/aws-controllers-k8s/code-generator/pkg/names" + "github.com/aws-controllers-k8s/code-generator/pkg/operations" "github.com/aws-controllers-k8s/code-generator/pkg/sdk" "github.com/aws-controllers-k8s/code-generator/pkg/util" awssdkmodel "github.com/aws/aws-sdk-go/private/model/api" @@ -83,13 +84,13 @@ func (m *Model) GetCRDs() ([]*CRD, error) { opMap := m.SDKAPI.GetOperationMap(m.cfg) - createOps := (*opMap)[sdk.OpTypeCreate] - readOneOps := (*opMap)[sdk.OpTypeGet] - readManyOps := (*opMap)[sdk.OpTypeList] - updateOps := (*opMap)[sdk.OpTypeUpdate] - deleteOps := (*opMap)[sdk.OpTypeDelete] - getAttributesOps := (*opMap)[sdk.OpTypeGetAttributes] - setAttributesOps := (*opMap)[sdk.OpTypeSetAttributes] + createOps := (*opMap)[operations.OpTypeCreate] + readOneOps := (*opMap)[operations.OpTypeGet] + readManyOps := (*opMap)[operations.OpTypeList] + updateOps := (*opMap)[operations.OpTypeUpdate] + deleteOps := (*opMap)[operations.OpTypeDelete] + getAttributesOps := (*opMap)[operations.OpTypeGetAttributes] + setAttributesOps := (*opMap)[operations.OpTypeSetAttributes] for crdName, createOp := range createOps { if m.cfg.IsIgnoredResource(crdName) { diff --git a/pkg/model/multiversion/delta.go b/pkg/model/multiversion/delta.go index 427c50be..174468a4 100644 --- a/pkg/model/multiversion/delta.go +++ b/pkg/model/multiversion/delta.go @@ -20,7 +20,7 @@ import ( awssdkmodel "github.com/aws/aws-sdk-go/private/model/api" ackmodel "github.com/aws-controllers-k8s/code-generator/pkg/model" - acksdk "github.com/aws-controllers-k8s/code-generator/pkg/sdk" + ackoperations "github.com/aws-controllers-k8s/code-generator/pkg/operations" ) // FieldChangeType represents the type of field modification. @@ -70,12 +70,12 @@ type CRDDelta struct { // spec and status fields deltas. src is the CRD of the spoke (source) version // and dst is the CRD of the hub (destination) version. func ComputeCRDFieldDeltas(src, dst *ackmodel.CRD) (*CRDDelta, error) { - dstRenames, err := dst.GetAllRenames(acksdk.OpTypeCreate) + dstRenames, err := dst.GetAllRenames(ackoperations.OpTypeCreate) if err != nil { return nil, fmt.Errorf("cannot get resource field renames: %s", err) } - srcRenames, err := src.GetAllRenames(acksdk.OpTypeCreate) + srcRenames, err := src.GetAllRenames(ackoperations.OpTypeCreate) if err != nil { return nil, fmt.Errorf("cannot get resource field renames: %s", err) } diff --git a/pkg/model/multiversion/delta_test.go b/pkg/model/multiversion/delta_test.go index b47c9534..79e1adb5 100644 --- a/pkg/model/multiversion/delta_test.go +++ b/pkg/model/multiversion/delta_test.go @@ -22,7 +22,7 @@ import ( "github.com/stretchr/testify/require" "github.com/aws-controllers-k8s/code-generator/pkg/model/multiversion" - acksdk "github.com/aws-controllers-k8s/code-generator/pkg/sdk" + ackoperations "github.com/aws-controllers-k8s/code-generator/pkg/operations" "github.com/aws-controllers-k8s/code-generator/pkg/testutil" ) @@ -385,9 +385,9 @@ func TestComputeFieldsDiff_ECR(t *testing.T) { field.ShapeRef.Shape = newEmptyStructShape(tt.args.src.mutateShape) } - srcRenames, err := srcCRD.GetAllRenames(acksdk.OpTypeCreate) + srcRenames, err := srcCRD.GetAllRenames(ackoperations.OpTypeCreate) require.Nil(err) - dstRenames, err := dstCRD.GetAllRenames(acksdk.OpTypeCreate) + dstRenames, err := dstCRD.GetAllRenames(ackoperations.OpTypeCreate) require.Nil(err) renames, err := multiversion.ComputeRenamesDelta(srcRenames, dstRenames) require.Nil(err) diff --git a/pkg/sdk/op.go b/pkg/operations/op.go similarity index 99% rename from pkg/sdk/op.go rename to pkg/operations/op.go index d858aa9e..50ce8411 100644 --- a/pkg/sdk/op.go +++ b/pkg/operations/op.go @@ -11,7 +11,7 @@ // express or implied. See the License for the specific language governing // permissions and limitations under the License. -package sdk +package operations import ( "strings" diff --git a/pkg/sdk/op_test.go b/pkg/operations/op_test.go similarity index 85% rename from pkg/sdk/op_test.go rename to pkg/operations/op_test.go index 29fe1205..d73f90a7 100644 --- a/pkg/sdk/op_test.go +++ b/pkg/operations/op_test.go @@ -11,7 +11,7 @@ // express or implied. See the License for the specific language governing // permissions and limitations under the License. -package sdk_test +package operations_test import ( "testing" @@ -29,82 +29,82 @@ func TestGetOpTypeAndResourceNameFromOpID(t *testing.T) { tests := []struct { opID string - expOpType sdk.OpType + expOpType operations.OpType expResName string }{ { "CreateTopic", - sdk.OpTypeCreate, + operations.OpTypeCreate, "Topic", }, { "CreateOrUpdateTopic", - sdk.OpTypeReplace, + operations.OpTypeReplace, "Topic", }, { "CreateBatchTopics", - sdk.OpTypeCreateBatch, + operations.OpTypeCreateBatch, "Topic", }, { "CreateBatchTopic", - sdk.OpTypeCreateBatch, + operations.OpTypeCreateBatch, "Topic", }, { "BatchCreateTopics", - sdk.OpTypeCreateBatch, + operations.OpTypeCreateBatch, "Topic", }, { "BatchCreateTopic", - sdk.OpTypeCreateBatch, + operations.OpTypeCreateBatch, "Topic", }, { "CreateTopics", - sdk.OpTypeCreateBatch, + operations.OpTypeCreateBatch, "Topic", }, { "DescribeEC2Instances", - sdk.OpTypeList, + operations.OpTypeList, "EC2Instance", }, { "DescribeEC2Instance", - sdk.OpTypeGet, + operations.OpTypeGet, "EC2Instance", }, { "UpdateTopic", - sdk.OpTypeUpdate, + operations.OpTypeUpdate, "Topic", }, { "DeleteTopic", - sdk.OpTypeDelete, + operations.OpTypeDelete, "Topic", }, { "DescribeInstances", - sdk.OpTypeList, + operations.OpTypeList, "Instance", }, { "ListDeploymentGroups", - sdk.OpTypeList, + operations.OpTypeList, "DeploymentGroup", }, { "GetDeployment", - sdk.OpTypeGet, + operations.OpTypeGet, "Deployment", }, { "PauseEC2Instance", - sdk.OpTypeUnknown, + operations.OpTypeUnknown, "PauseEC2Instance", }, // Heuristic should incorrectly parse DhcpOptions ops diff --git a/pkg/sdk/sdk_helper.go b/pkg/sdk/sdk_helper.go index a579375c..272fd6cb 100644 --- a/pkg/sdk/sdk_helper.go +++ b/pkg/sdk/sdk_helper.go @@ -26,6 +26,7 @@ import ( ackgenconfig "github.com/aws-controllers-k8s/code-generator/pkg/generate/config" "github.com/aws-controllers-k8s/code-generator/pkg/names" + "github.com/aws-controllers-k8s/code-generator/pkg/operations" "github.com/aws-controllers-k8s/code-generator/pkg/util" awssdkmodel "github.com/aws/aws-sdk-go/private/model/api" @@ -187,7 +188,7 @@ type SDKAPI struct { APIGroupSuffix string // A map of operation type and resource name to // aws-sdk-go/private/model/api.Operation structs - opMap *OperationMap + opMap *operations.OperationMap // Map, keyed by original Shape GoTypeElem(), with the values being a // renamed type name (due to conflicting names) typeRenames map[string]string @@ -207,12 +208,12 @@ func (a *SDKAPI) GetPayloads() []string { // GetOperationMap returns a map, keyed by the operation type and operation // ID/name, of aws-sdk-go private/model/api.Operation struct pointers -func (a *SDKAPI) GetOperationMap(cfg *ackgenconfig.Config) *OperationMap { +func (a *SDKAPI) GetOperationMap(cfg *ackgenconfig.Config) *operations.OperationMap { if a.opMap != nil { return a.opMap } // create an index of Operations by operation types and resource name - opMap := OperationMap{} + opMap := operations.OperationMap{} for opID, op := range a.API.Operations { opTypeArray, resName := getOpTypeAndResourceName(opID, cfg) for _, opType := range opTypeArray { @@ -291,7 +292,7 @@ func getMemberByPath( // API func (a *SDKAPI) CRDNames(cfg *ackgenconfig.Config) []names.Names { opMap := a.GetOperationMap(cfg) - createOps := (*opMap)[OpTypeCreate] + createOps := (*opMap)[operations.OpTypeCreate] crdNames := []names.Names{} for crdName := range createOps { if cfg.IsIgnoredResource(crdName) { @@ -401,7 +402,7 @@ func getOpTypeAndResourceName(opID string, cfg *ackgenconfig.Config) ([]OpType, } for _, operationType := range operationConfig.OperationType { - opType = OpTypeFromString(operationType) + opType = operations.OpTypeFromString(operationType) opTypes = append(opTypes, opType) } } From cda1650c63a1af00eced10fe46c43a8761cb12f6 Mon Sep 17 00:00:00 2001 From: Nicholas Thomson Date: Wed, 13 Oct 2021 16:01:13 -0700 Subject: [PATCH 4/7] Rename SDKHelper to Helper --- cmd/ack-generate/command/common.go | 2 +- cmd/ack-generate/command/crossplane.go | 2 +- pkg/model/multiversion/manager.go | 2 +- pkg/sdk/{sdk_helper.go => helper.go} | 22 +++++++++---------- .../{sdk_helper_test.go => helper_test.go} | 2 +- pkg/testutil/schema_helper.go | 2 +- 6 files changed, 16 insertions(+), 16 deletions(-) rename pkg/sdk/{sdk_helper.go => helper.go} (95%) rename pkg/sdk/{sdk_helper_test.go => helper_test.go} (98%) diff --git a/cmd/ack-generate/command/common.go b/cmd/ack-generate/command/common.go index 4d698863..37bad236 100644 --- a/cmd/ack-generate/command/common.go +++ b/cmd/ack-generate/command/common.go @@ -237,7 +237,7 @@ func loadModel(svcAlias string, apiVersion string) (*ackmodel.Model, error) { modelName = svcAlias } - sdkHelper := acksdk.NewSDKHelper(sdkDir) + sdkHelper := acksdk.NewHelper(sdkDir) sdkAPI, err := sdkHelper.API(modelName) if err != nil { retryModelName, err := FallBackFindServiceID(sdkDir, svcAlias) diff --git a/cmd/ack-generate/command/crossplane.go b/cmd/ack-generate/command/crossplane.go index 132fc004..f9d68eec 100644 --- a/cmd/ack-generate/command/crossplane.go +++ b/cmd/ack-generate/command/crossplane.go @@ -70,7 +70,7 @@ func generateCrossplane(_ *cobra.Command, args []string) error { if err != nil { return err } - sdkHelper := acksdk.NewSDKHelper(sdkDir) + sdkHelper := acksdk.NewHelper(sdkDir) sdkHelper.APIGroupSuffix = "aws.crossplane.io" sdkAPI, err := sdkHelper.API(svcAlias) if err != nil { diff --git a/pkg/model/multiversion/manager.go b/pkg/model/multiversion/manager.go index b1c1e6f7..996767e9 100644 --- a/pkg/model/multiversion/manager.go +++ b/pkg/model/multiversion/manager.go @@ -72,7 +72,7 @@ func NewAPIVersionManager( return nil, fmt.Errorf("cannot read sdk git repository: %v", err) } - SDKAPIHelper := acksdk.NewSDKHelper(sdkCacheDir) + SDKAPIHelper := acksdk.NewHelper(sdkCacheDir) // create model for each non-deprecated api version models := map[string]*ackmodel.Model{} diff --git a/pkg/sdk/sdk_helper.go b/pkg/sdk/helper.go similarity index 95% rename from pkg/sdk/sdk_helper.go rename to pkg/sdk/helper.go index 272fd6cb..68b36287 100644 --- a/pkg/sdk/sdk_helper.go +++ b/pkg/sdk/helper.go @@ -54,9 +54,9 @@ const ( ConflictingNameSuffix = "_SDK" ) -// SDKHelper is a helper struct that helps work with the aws-sdk-go models and +// Helper is a helper struct that helps work with the aws-sdk-go models and // API model loader -type SDKHelper struct { +type Helper struct { gitRepository *git.Repository basePath string loader *awssdkmodel.Loader @@ -66,9 +66,9 @@ type SDKHelper struct { APIGroupSuffix string } -// NewSDKHelper returns a new SDKHelper object -func NewSDKHelper(basePath string) *SDKHelper { - return &SDKHelper{ +// NewHelper returns a new SDKHelper object +func NewHelper(basePath string) *Helper { + return &Helper{ basePath: basePath, loader: &awssdkmodel.Loader{ BaseImport: basePath, @@ -79,7 +79,7 @@ func NewSDKHelper(basePath string) *SDKHelper { // WithSDKVersion checks out the sdk git repository to the provided version. To use // this function h.basePath should point to a git repository. -func (h *SDKHelper) WithSDKVersion(version string) error { +func (h *Helper) WithSDKVersion(version string) error { if h.gitRepository == nil { gitRepository, err := util.LoadRepository(h.basePath) if err != nil { @@ -96,12 +96,12 @@ func (h *SDKHelper) WithSDKVersion(version string) error { } // WithAPIVersion sets the `apiVersion` field. -func (h *SDKHelper) WithAPIVersion(apiVersion string) { +func (h *Helper) WithAPIVersion(apiVersion string) { h.apiVersion = apiVersion } // API returns the aws-sdk-go API model for a supplied service model name. -func (h *SDKHelper) API(serviceModelName string) (*SDKAPI, error) { +func (h *Helper) API(serviceModelName string) (*SDKAPI, error) { modelPath, _, err := h.ModelAndDocsPath(serviceModelName) if err != nil { return nil, err @@ -127,7 +127,7 @@ func (h *SDKHelper) API(serviceModelName string) (*SDKAPI, error) { // ModelAndDocsPath returns two string paths to the supplied service's API and // doc JSON files -func (h *SDKHelper) ModelAndDocsPath( +func (h *Helper) ModelAndDocsPath( serviceModelName string, ) (string, string, error) { if h.apiVersion == "" { @@ -147,7 +147,7 @@ func (h *SDKHelper) ModelAndDocsPath( // FirstAPIVersion returns the first found API version for a service API. // (e.h. "2012-10-03") -func (h *SDKHelper) FirstAPIVersion(serviceModelName string) (string, error) { +func (h *Helper) FirstAPIVersion(serviceModelName string) (string, error) { versions, err := h.GetAPIVersions(serviceModelName) if err != nil { return "", err @@ -157,7 +157,7 @@ func (h *SDKHelper) FirstAPIVersion(serviceModelName string) (string, error) { } // GetAPIVersions returns the list of API Versions found in a service directory. -func (h *SDKHelper) GetAPIVersions(serviceModelName string) ([]string, error) { +func (h *Helper) GetAPIVersions(serviceModelName string) ([]string, error) { apiPath := filepath.Join(h.basePath, "models", "apis", serviceModelName) versionDirs, err := ioutil.ReadDir(apiPath) if err != nil { diff --git a/pkg/sdk/sdk_helper_test.go b/pkg/sdk/helper_test.go similarity index 98% rename from pkg/sdk/sdk_helper_test.go rename to pkg/sdk/helper_test.go index d14d2164..0e289ce0 100644 --- a/pkg/sdk/sdk_helper_test.go +++ b/pkg/sdk/helper_test.go @@ -32,7 +32,7 @@ func lambdaSDKAPI(t *testing.T) *sdk.SDKAPI { return lambda } path := filepath.Clean("../testdata") - sdkHelper := sdk.NewSDKHelper(path) + sdkHelper := sdk.NewHelper(path) lambda, err := sdkHelper.API("lambda") if err != nil { t.Fatal(err) diff --git a/pkg/testutil/schema_helper.go b/pkg/testutil/schema_helper.go index a1c9b57d..f3310a72 100644 --- a/pkg/testutil/schema_helper.go +++ b/pkg/testutil/schema_helper.go @@ -73,7 +73,7 @@ func NewModelForServiceWithOptions(t *testing.T, servicePackageName string, opti } } options.SetDefaults() - sdkHelper := acksdk.NewSDKHelper(path) + sdkHelper := acksdk.NewHelper(path) sdkHelper.WithAPIVersion(options.ServiceAPIVersion) sdkAPI, err := sdkHelper.API(servicePackageName) if err != nil { From 70f6fd28ab75e97a52358a130febb063eb376556 Mon Sep 17 00:00:00 2001 From: Nicholas Thomson Date: Tue, 19 Oct 2021 15:36:56 -0700 Subject: [PATCH 5/7] Move SDKAPI back to model --- pkg/generate/ack/apis.go | 3 +- pkg/generate/ack/controller.go | 27 ++- pkg/generate/code/check.go | 11 +- pkg/generate/code/check_test.go | 12 +- pkg/generate/code/set_resource.go | 17 +- pkg/generate/code/set_resource_test.go | 36 ++-- pkg/generate/code/set_sdk.go | 15 +- pkg/generate/code/set_sdk_test.go | 32 +-- pkg/generate/crossplane/crossplane.go | 17 +- pkg/model/crd.go | 8 +- pkg/model/model.go | 26 ++- pkg/model/multiversion/delta.go | 5 +- pkg/model/multiversion/delta_test.go | 6 +- pkg/{operations => model}/op.go | 2 +- pkg/{operations => model}/op_test.go | 34 ++-- pkg/model/sdk_api.go | 268 +++++++++++++++++++++++++ pkg/model/types.go | 3 +- pkg/sdk/helper.go | 243 +--------------------- pkg/sdk/helper_test.go | 5 +- 19 files changed, 395 insertions(+), 375 deletions(-) rename pkg/{operations => model}/op.go (99%) rename pkg/{operations => model}/op_test.go (85%) create mode 100644 pkg/model/sdk_api.go diff --git a/pkg/generate/ack/apis.go b/pkg/generate/ack/apis.go index 6f9feb9c..b3df9156 100644 --- a/pkg/generate/ack/apis.go +++ b/pkg/generate/ack/apis.go @@ -20,7 +20,6 @@ import ( "github.com/aws-controllers-k8s/code-generator/pkg/generate/templateset" ackmodel "github.com/aws-controllers-k8s/code-generator/pkg/model" - acksdk "github.com/aws-controllers-k8s/code-generator/pkg/sdk" "github.com/iancoleman/strcase" ) @@ -107,6 +106,6 @@ type templateAPIVars struct { // code for a single top-level resource's API definition type templateCRDVars struct { templateset.MetaVars - SDKAPI *acksdk.SDKAPI + SDKAPI *ackmodel.SDKAPI CRD *ackmodel.CRD } diff --git a/pkg/generate/ack/controller.go b/pkg/generate/ack/controller.go index 0960d134..a51573cc 100644 --- a/pkg/generate/ack/controller.go +++ b/pkg/generate/ack/controller.go @@ -22,7 +22,6 @@ import ( ackgenconfig "github.com/aws-controllers-k8s/code-generator/pkg/generate/config" "github.com/aws-controllers-k8s/code-generator/pkg/generate/templateset" ackmodel "github.com/aws-controllers-k8s/code-generator/pkg/model" - ackoperations "github.com/aws-controllers-k8s/code-generator/pkg/operations" awssdkmodel "github.com/aws/aws-sdk-go/private/model/api" ) @@ -61,16 +60,16 @@ var ( return code.CheckExceptionMessage(r.Config(), r, httpStatusCode) }, "GoCodeSetReadOneOutput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetResource(r.Config(), r, ackoperations.OpTypeGet, sourceVarName, targetVarName, indentLevel) + return code.SetResource(r.Config(), r, ackmodel.OpTypeGet, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetReadOneInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetSDK(r.Config(), r, ackoperations.OpTypeGet, sourceVarName, targetVarName, indentLevel) + return code.SetSDK(r.Config(), r, ackmodel.OpTypeGet, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetReadManyOutput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetResource(r.Config(), r, ackoperations.OpTypeList, sourceVarName, targetVarName, indentLevel) + return code.SetResource(r.Config(), r, ackmodel.OpTypeList, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetReadManyInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetSDK(r.Config(), r, ackoperations.OpTypeList, sourceVarName, targetVarName, indentLevel) + return code.SetSDK(r.Config(), r, ackmodel.OpTypeList, sourceVarName, targetVarName, indentLevel) }, "GoCodeGetAttributesSetInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { return code.SetSDKGetAttributes(r.Config(), r, sourceVarName, targetVarName, indentLevel) @@ -82,19 +81,19 @@ var ( return code.SetResourceGetAttributes(r.Config(), r, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetCreateOutput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetResource(r.Config(), r, ackoperations.OpTypeCreate, sourceVarName, targetVarName, indentLevel) + return code.SetResource(r.Config(), r, ackmodel.OpTypeCreate, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetCreateInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetSDK(r.Config(), r, ackoperations.OpTypeCreate, sourceVarName, targetVarName, indentLevel) + return code.SetSDK(r.Config(), r, ackmodel.OpTypeCreate, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetUpdateOutput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetResource(r.Config(), r, ackoperations.OpTypeUpdate, sourceVarName, targetVarName, indentLevel) + return code.SetResource(r.Config(), r, ackmodel.OpTypeUpdate, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetUpdateInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetSDK(r.Config(), r, ackoperations.OpTypeUpdate, sourceVarName, targetVarName, indentLevel) + return code.SetSDK(r.Config(), r, ackmodel.OpTypeUpdate, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetDeleteInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetSDK(r.Config(), r, ackoperations.OpTypeDelete, sourceVarName, targetVarName, indentLevel) + return code.SetSDK(r.Config(), r, ackmodel.OpTypeDelete, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetSDKForStruct": func(r *ackmodel.CRD, targetFieldName string, targetVarName string, targetShapeRef *awssdkmodel.ShapeRef, sourceFieldPath string, sourceVarName string, indentLevel int) string { return code.SetSDKForStruct(r.Config(), r, targetFieldName, targetVarName, targetShapeRef, sourceFieldPath, sourceVarName, indentLevel) @@ -109,16 +108,16 @@ var ( return strings.TrimSpace(subject) == "" }, "GoCodeRequiredFieldsMissingFromReadOneInput": func(r *ackmodel.CRD, koVarName string, indentLevel int) string { - return code.CheckRequiredFieldsMissingFromShape(r, ackoperations.OpTypeGet, koVarName, indentLevel) + return code.CheckRequiredFieldsMissingFromShape(r, ackmodel.OpTypeGet, koVarName, indentLevel) }, "GoCodeRequiredFieldsMissingFromReadManyInput": func(r *ackmodel.CRD, koVarName string, indentLevel int) string { - return code.CheckRequiredFieldsMissingFromShape(r, ackoperations.OpTypeList, koVarName, indentLevel) + return code.CheckRequiredFieldsMissingFromShape(r, ackmodel.OpTypeList, koVarName, indentLevel) }, "GoCodeRequiredFieldsMissingFromGetAttributesInput": func(r *ackmodel.CRD, koVarName string, indentLevel int) string { - return code.CheckRequiredFieldsMissingFromShape(r, ackoperations.OpTypeGetAttributes, koVarName, indentLevel) + return code.CheckRequiredFieldsMissingFromShape(r, ackmodel.OpTypeGetAttributes, koVarName, indentLevel) }, "GoCodeRequiredFieldsMissingFromSetAttributesInput": func(r *ackmodel.CRD, koVarName string, indentLevel int) string { - return code.CheckRequiredFieldsMissingFromShape(r, ackoperations.OpTypeSetAttributes, koVarName, indentLevel) + return code.CheckRequiredFieldsMissingFromShape(r, ackmodel.OpTypeSetAttributes, koVarName, indentLevel) }, "GoCodeSetResourceIdentifiers": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { return code.SetResourceIdentifiers(r.Config(), r, sourceVarName, targetVarName, indentLevel) diff --git a/pkg/generate/code/check.go b/pkg/generate/code/check.go index 14db3df9..63426dcc 100644 --- a/pkg/generate/code/check.go +++ b/pkg/generate/code/check.go @@ -21,7 +21,6 @@ import ( ackgenconfig "github.com/aws-controllers-k8s/code-generator/pkg/generate/config" "github.com/aws-controllers-k8s/code-generator/pkg/model" - "github.com/aws-controllers-k8s/code-generator/pkg/operations" ) // CheckExceptionMessage returns Go code that contains a condition to @@ -66,21 +65,21 @@ func CheckExceptionMessage( // return r.ko.Spec.APIID == nil || r.ko.Status.RouteID == nil func CheckRequiredFieldsMissingFromShape( r *model.CRD, - opType operations.OpType, + opType model.OpType, koVarName string, indentLevel int, ) string { var op *awssdkmodel.Operation switch opType { - case operations.OpTypeGet: + case model.OpTypeGet: op = r.Ops.ReadOne - case operations.OpTypeList: + case model.OpTypeList: op = r.Ops.ReadMany return checkRequiredFieldsMissingFromShapeReadMany( r, koVarName, indentLevel, op, op.InputRef.Shape) - case operations.OpTypeGetAttributes: + case model.OpTypeGetAttributes: op = r.Ops.GetAttributes - case operations.OpTypeSetAttributes: + case model.OpTypeSetAttributes: op = r.Ops.SetAttributes default: return "" diff --git a/pkg/generate/code/check_test.go b/pkg/generate/code/check_test.go index 26e6a5c8..ce1efc97 100644 --- a/pkg/generate/code/check_test.go +++ b/pkg/generate/code/check_test.go @@ -21,7 +21,7 @@ import ( "github.com/stretchr/testify/require" "github.com/aws-controllers-k8s/code-generator/pkg/generate/code" - "github.com/aws-controllers-k8s/code-generator/pkg/operations" + "github.com/aws-controllers-k8s/code-generator/pkg/model" "github.com/aws-controllers-k8s/code-generator/pkg/testutil" ) @@ -47,7 +47,7 @@ func TestCheckRequiredFields_Attributes_ARNField(t *testing.T) { strings.TrimSpace(expReqFieldsInShape), strings.TrimSpace( code.CheckRequiredFieldsMissingFromShape( - crd, operations.OpTypeGetAttributes, "ko", 1, + crd, model.OpTypeGetAttributes, "ko", 1, ), ), ) @@ -66,7 +66,7 @@ func TestCheckRequiredFields_Attributes_StatusField(t *testing.T) { return r.ko.Status.QueueURL == nil ` gotCode := code.CheckRequiredFieldsMissingFromShape( - crd, operations.OpTypeGetAttributes, "r.ko", 1, + crd, model.OpTypeGetAttributes, "r.ko", 1, ) assert.Equal( strings.TrimSpace(expRequiredFieldsCode), @@ -87,7 +87,7 @@ func TestCheckRequiredFields_Attributes_StatusAndSpecField(t *testing.T) { return r.ko.Spec.APIID == nil || r.ko.Status.RouteID == nil ` gotCode := code.CheckRequiredFieldsMissingFromShape( - crd, operations.OpTypeGet, "r.ko", 1, + crd, model.OpTypeGet, "r.ko", 1, ) assert.Equal( strings.TrimSpace(expRequiredFieldsCode), @@ -108,7 +108,7 @@ func TestCheckRequiredFields_RenamedSpecField(t *testing.T) { return r.ko.Spec.ClusterName == nil || r.ko.Spec.Name == nil ` gotCode := code.CheckRequiredFieldsMissingFromShape( - crd, operations.OpTypeGet, "r.ko", 1, + crd, model.OpTypeGet, "r.ko", 1, ) assert.Equal( strings.TrimSpace(expRequiredFieldsCode), @@ -129,7 +129,7 @@ func TestCheckRequiredFields_StatusField_ReadMany(t *testing.T) { return r.ko.Status.VPCID == nil ` gotCode := code.CheckRequiredFieldsMissingFromShape( - crd, operations.OpTypeList, "r.ko", 1, + crd, model.OpTypeList, "r.ko", 1, ) assert.Equal( strings.TrimSpace(expRequiredFieldsCode), diff --git a/pkg/generate/code/set_resource.go b/pkg/generate/code/set_resource.go index 8dae1d95..5d97fc4c 100644 --- a/pkg/generate/code/set_resource.go +++ b/pkg/generate/code/set_resource.go @@ -23,7 +23,6 @@ import ( ackgenconfig "github.com/aws-controllers-k8s/code-generator/pkg/generate/config" "github.com/aws-controllers-k8s/code-generator/pkg/model" "github.com/aws-controllers-k8s/code-generator/pkg/names" - "github.com/aws-controllers-k8s/code-generator/pkg/operations" "github.com/aws-controllers-k8s/code-generator/pkg/util" ) @@ -76,7 +75,7 @@ func SetResource( cfg *ackgenconfig.Config, r *model.CRD, // The type of operation to look for the Output shape - opType operations.OpType, + opType model.OpType, // String representing the name of the variable that we will grab the // Output shape from. This will likely be "resp" since in the templates // that call this method, the "source variable" is the response struct @@ -92,18 +91,18 @@ func SetResource( ) string { var op *awssdkmodel.Operation switch opType { - case operations.OpTypeCreate: + case model.OpTypeCreate: op = r.Ops.Create - case operations.OpTypeGet: + case model.OpTypeGet: op = r.Ops.ReadOne - case operations.OpTypeList: + case model.OpTypeList: return setResourceReadMany( cfg, r, r.Ops.ReadMany, sourceVarName, targetVarName, indentLevel, ) - case operations.OpTypeUpdate: + case model.OpTypeUpdate: op = r.Ops.Update - case operations.OpTypeDelete: + case model.OpTypeDelete: op = r.Ops.Delete default: return "" @@ -308,7 +307,7 @@ func ListMemberNameInReadManyOutput( // Find the element in the output shape that contains the list of // resources. This heuristic is simplistic (just look for the field with a // list type) but seems to be followed consistently by the aws-sdk-go for - // List operations. + // List model. for memberName, memberShapeRef := range r.Ops.ReadMany.OutputRef.Shape.MemberRefs { if memberShapeRef.Shape.Type == "list" { return memberName @@ -398,7 +397,7 @@ func setResourceReadMany( // Find the element in the output shape that contains the list of // resources. This heuristic is simplistic (just look for the field with a // list type) but seems to be followed consistently by the aws-sdk-go for - // List operations. + // List model. for memberName, memberShapeRef := range outputShape.MemberRefs { if memberShapeRef.Shape.Type == "list" { listShapeName = memberName diff --git a/pkg/generate/code/set_resource_test.go b/pkg/generate/code/set_resource_test.go index 48833bfa..dd37ba7f 100644 --- a/pkg/generate/code/set_resource_test.go +++ b/pkg/generate/code/set_resource_test.go @@ -20,7 +20,7 @@ import ( "github.com/stretchr/testify/require" "github.com/aws-controllers-k8s/code-generator/pkg/generate/code" - "github.com/aws-controllers-k8s/code-generator/pkg/operations" + "github.com/aws-controllers-k8s/code-generator/pkg/model" "github.com/aws-controllers-k8s/code-generator/pkg/testutil" ) @@ -122,7 +122,7 @@ func TestSetResource_APIGWv2_Route_Create(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, operations.OpTypeCreate, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, model.OpTypeCreate, "resp", "ko", 1), ) } @@ -224,7 +224,7 @@ func TestSetResource_APIGWv2_Route_ReadOne(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, operations.OpTypeGet, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, model.OpTypeGet, "resp", "ko", 1), ) } @@ -278,7 +278,7 @@ func TestSetResource_DynamoDB_Backup_ReadOne(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, operations.OpTypeGet, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, model.OpTypeGet, "resp", "ko", 1), ) } @@ -304,7 +304,7 @@ func TestSetResource_CodeDeploy_Deployment_Create(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, operations.OpTypeCreate, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, model.OpTypeCreate, "resp", "ko", 1), ) } @@ -652,7 +652,7 @@ func TestSetResource_DynamoDB_Table_ReadOne(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, operations.OpTypeGet, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, model.OpTypeGet, "resp", "ko", 1), ) } @@ -718,7 +718,7 @@ func TestSetResource_EC2_LaunchTemplate_Create(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, operations.OpTypeCreate, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, model.OpTypeCreate, "resp", "ko", 1), ) } @@ -779,7 +779,7 @@ func TestSetResource_ECR_Repository_Create(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, operations.OpTypeCreate, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, model.OpTypeCreate, "resp", "ko", 1), ) } @@ -855,7 +855,7 @@ func TestSetResource_ECR_Repository_ReadMany(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, operations.OpTypeList, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, model.OpTypeList, "resp", "ko", 1), ) } @@ -1203,7 +1203,7 @@ func TestSetResource_Elasticache_ReplicationGroup_Create(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, operations.OpTypeCreate, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, model.OpTypeCreate, "resp", "ko", 1), ) } @@ -1559,7 +1559,7 @@ func TestSetResource_Elasticache_ReplicationGroup_ReadMany(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, operations.OpTypeList, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, model.OpTypeList, "resp", "ko", 1), ) } @@ -2113,7 +2113,7 @@ func TestSetResource_RDS_DBInstance_Create(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, operations.OpTypeCreate, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, model.OpTypeCreate, "resp", "ko", 1), ) } @@ -2678,7 +2678,7 @@ func TestSetResource_RDS_DBInstance_ReadMany(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, operations.OpTypeList, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, model.OpTypeList, "resp", "ko", 1), ) } @@ -2700,7 +2700,7 @@ func TestSetResource_S3_Bucket_Create(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, operations.OpTypeCreate, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, model.OpTypeCreate, "resp", "ko", 1), ) } @@ -2735,7 +2735,7 @@ func TestSetResource_S3_Bucket_ReadMany(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, operations.OpTypeList, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, model.OpTypeList, "resp", "ko", 1), ) } @@ -2765,7 +2765,7 @@ func TestSetResource_SNS_Topic_Create(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, operations.OpTypeCreate, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, model.OpTypeCreate, "resp", "ko", 1), ) } @@ -2819,7 +2819,7 @@ func TestSetResource_SQS_Queue_Create(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, operations.OpTypeCreate, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, model.OpTypeCreate, "resp", "ko", 1), ) } @@ -2934,7 +2934,7 @@ func TestSetResource_RDS_DBSubnetGroup_ReadMany(t *testing.T) { ` assert.Equal( expected, - code.SetResource(crd.Config(), crd, operations.OpTypeList, "resp", "ko", 1), + code.SetResource(crd.Config(), crd, model.OpTypeList, "resp", "ko", 1), ) } diff --git a/pkg/generate/code/set_sdk.go b/pkg/generate/code/set_sdk.go index a0b2fffa..2abfad13 100644 --- a/pkg/generate/code/set_sdk.go +++ b/pkg/generate/code/set_sdk.go @@ -23,7 +23,6 @@ import ( ackgenconfig "github.com/aws-controllers-k8s/code-generator/pkg/generate/config" "github.com/aws-controllers-k8s/code-generator/pkg/model" "github.com/aws-controllers-k8s/code-generator/pkg/names" - "github.com/aws-controllers-k8s/code-generator/pkg/operations" ) // SetSDK returns the Go code that sets an SDK input shape's member fields from @@ -77,7 +76,7 @@ func SetSDK( cfg *ackgenconfig.Config, r *model.CRD, // The type of operation to look for the Input shape - opType operations.OpType, + opType model.OpType, // String representing the name of the variable that we will grab the Input // shape from. This will likely be "r.ko" since in the templates that call // this method, the "source variable" is the CRD struct which is used to @@ -93,17 +92,17 @@ func SetSDK( ) string { var op *awssdkmodel.Operation switch opType { - case operations.OpTypeCreate: + case model.OpTypeCreate: op = r.Ops.Create - case operations.OpTypeGet: + case model.OpTypeGet: op = r.Ops.ReadOne - case operations.OpTypeList: + case model.OpTypeList: op = r.Ops.ReadMany return setSDKReadMany(cfg, r, op, sourceVarName, targetVarName, indentLevel) - case operations.OpTypeUpdate: + case model.OpTypeUpdate: op = r.Ops.Update - case operations.OpTypeDelete: + case model.OpTypeDelete: op = r.Ops.Delete default: return "" @@ -1315,7 +1314,7 @@ func varEmptyConstructorK8sType( // setSDKForScalar returns the Go code that sets the value of a target variable // or field to a scalar value. For target variables that are structs, we output // the aws-sdk-go's common SetXXX() method. For everything else, we output -// normal assignment operations. +// normal assignment model. func setSDKForScalar( cfg *ackgenconfig.Config, r *model.CRD, diff --git a/pkg/generate/code/set_sdk_test.go b/pkg/generate/code/set_sdk_test.go index d720aa4f..71193dd9 100644 --- a/pkg/generate/code/set_sdk_test.go +++ b/pkg/generate/code/set_sdk_test.go @@ -20,7 +20,7 @@ import ( "github.com/stretchr/testify/require" "github.com/aws-controllers-k8s/code-generator/pkg/generate/code" - "github.com/aws-controllers-k8s/code-generator/pkg/operations" + "github.com/aws-controllers-k8s/code-generator/pkg/model" "github.com/aws-controllers-k8s/code-generator/pkg/testutil" ) @@ -93,7 +93,7 @@ func TestSetSDK_APIGWv2_Route_Create(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, operations.OpTypeCreate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, model.OpTypeCreate, "r.ko", "res", 1), ) } @@ -283,7 +283,7 @@ func TestSetSDK_DynamoDB_Table_Create(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, operations.OpTypeCreate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, model.OpTypeCreate, "r.ko", "res", 1), ) } @@ -687,7 +687,7 @@ func TestSetSDK_EC2_LaunchTemplate_Create(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, operations.OpTypeCreate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, model.OpTypeCreate, "r.ko", "res", 1), ) } @@ -735,7 +735,7 @@ func TestSetSDK_ECR_Repository_Create(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, operations.OpTypeCreate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, model.OpTypeCreate, "r.ko", "res", 1), ) } @@ -968,7 +968,7 @@ func TestSetSDK_Elasticache_ReplicationGroup_Create(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, operations.OpTypeCreate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, model.OpTypeCreate, "r.ko", "res", 1), ) } @@ -992,7 +992,7 @@ func TestSetSDK_Elasticache_ReplicationGroup_ReadMany(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, operations.OpTypeList, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, model.OpTypeList, "r.ko", "res", 1), ) } @@ -1105,7 +1105,7 @@ func TestSetSDK_Elasticache_ReplicationGroup_Update_Override_Values(t *testing.T ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, operations.OpTypeUpdate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, model.OpTypeUpdate, "r.ko", "res", 1), ) } @@ -1148,7 +1148,7 @@ func TestSetSDK_Elasticache_User_Create_Override_Values(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, operations.OpTypeUpdate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, model.OpTypeUpdate, "r.ko", "res", 1), ) } @@ -1343,7 +1343,7 @@ func TestSetSDK_RDS_DBInstance_Create(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, operations.OpTypeCreate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, model.OpTypeCreate, "r.ko", "res", 1), ) } @@ -1391,7 +1391,7 @@ func TestSetSDK_S3_Bucket_Create(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, operations.OpTypeCreate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, model.OpTypeCreate, "r.ko", "res", 1), ) } @@ -1411,7 +1411,7 @@ func TestSetSDK_S3_Bucket_Delete(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, operations.OpTypeDelete, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, model.OpTypeDelete, "r.ko", "res", 1), ) } @@ -1463,7 +1463,7 @@ func TestSetSDK_SNS_Topic_Create(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, operations.OpTypeCreate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, model.OpTypeCreate, "r.ko", "res", 1), ) } @@ -1553,7 +1553,7 @@ func TestSetSDK_SQS_Queue_Create(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, operations.OpTypeCreate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, model.OpTypeCreate, "r.ko", "res", 1), ) } @@ -1775,7 +1775,7 @@ func TestSetSDK_MQ_Broker_Create(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, operations.OpTypeCreate, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, model.OpTypeCreate, "r.ko", "res", 1), ) } @@ -1797,6 +1797,6 @@ func TestSetSDK_EC2_VPC_ReadMany(t *testing.T) { ` assert.Equal( expected, - code.SetSDK(crd.Config(), crd, operations.OpTypeList, "r.ko", "res", 1), + code.SetSDK(crd.Config(), crd, model.OpTypeList, "r.ko", "res", 1), ) } diff --git a/pkg/generate/crossplane/crossplane.go b/pkg/generate/crossplane/crossplane.go index 263164b8..622c3896 100644 --- a/pkg/generate/crossplane/crossplane.go +++ b/pkg/generate/crossplane/crossplane.go @@ -21,7 +21,6 @@ import ( "github.com/aws-controllers-k8s/code-generator/pkg/generate/code" "github.com/aws-controllers-k8s/code-generator/pkg/generate/templateset" ackmodel "github.com/aws-controllers-k8s/code-generator/pkg/model" - ackoperations "github.com/aws-controllers-k8s/code-generator/pkg/operations" "github.com/iancoleman/strcase" ) @@ -53,19 +52,19 @@ var ( return code.CheckExceptionMessage(r.Config(), r, httpStatusCode) }, "GoCodeSetReadOneOutput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetResource(r.Config(), r, ackoperations.OpTypeGet, sourceVarName, targetVarName, indentLevel) + return code.SetResource(r.Config(), r, ackmodel.OpTypeGet, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetReadOneInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetSDK(r.Config(), r, ackoperations.OpTypeGet, sourceVarName, targetVarName, indentLevel) + return code.SetSDK(r.Config(), r, ackmodel.OpTypeGet, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetReadManyOutput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetResource(r.Config(), r, ackoperations.OpTypeList, sourceVarName, targetVarName, indentLevel) + return code.SetResource(r.Config(), r, ackmodel.OpTypeList, sourceVarName, targetVarName, indentLevel) }, "ListMemberNameInReadManyOutput": func(r *ackmodel.CRD) string { return code.ListMemberNameInReadManyOutput(r) }, "GoCodeSetReadManyInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetSDK(r.Config(), r, ackoperations.OpTypeList, sourceVarName, targetVarName, indentLevel) + return code.SetSDK(r.Config(), r, ackmodel.OpTypeList, sourceVarName, targetVarName, indentLevel) }, "GoCodeGetAttributesSetInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { return code.SetSDKGetAttributes(r.Config(), r, sourceVarName, targetVarName, indentLevel) @@ -77,16 +76,16 @@ var ( return code.SetResourceGetAttributes(r.Config(), r, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetCreateOutput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetResource(r.Config(), r, ackoperations.OpTypeCreate, sourceVarName, targetVarName, indentLevel) + return code.SetResource(r.Config(), r, ackmodel.OpTypeCreate, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetCreateInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetSDK(r.Config(), r, ackoperations.OpTypeCreate, sourceVarName, targetVarName, indentLevel) + return code.SetSDK(r.Config(), r, ackmodel.OpTypeCreate, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetUpdateInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetSDK(r.Config(), r, ackoperations.OpTypeUpdate, sourceVarName, targetVarName, indentLevel) + return code.SetSDK(r.Config(), r, ackmodel.OpTypeUpdate, sourceVarName, targetVarName, indentLevel) }, "GoCodeSetDeleteInput": func(r *ackmodel.CRD, sourceVarName string, targetVarName string, indentLevel int) string { - return code.SetSDK(r.Config(), r, ackoperations.OpTypeDelete, sourceVarName, targetVarName, indentLevel) + return code.SetSDK(r.Config(), r, ackmodel.OpTypeDelete, sourceVarName, targetVarName, indentLevel) }, "Empty": func(subject string) bool { return strings.TrimSpace(subject) == "" diff --git a/pkg/model/crd.go b/pkg/model/crd.go index 8c3911de..3c62fb41 100644 --- a/pkg/model/crd.go +++ b/pkg/model/crd.go @@ -24,8 +24,6 @@ import ( ackgenconfig "github.com/aws-controllers-k8s/code-generator/pkg/generate/config" "github.com/aws-controllers-k8s/code-generator/pkg/names" - "github.com/aws-controllers-k8s/code-generator/pkg/operations" - "github.com/aws-controllers-k8s/code-generator/pkg/sdk" "github.com/aws-controllers-k8s/code-generator/pkg/util" ) @@ -63,7 +61,7 @@ func (ops Ops) IterOps() []*awssdkmodel.Operation { // CRD describes a single top-level resource in an AWS service API type CRD struct { - sdkAPI *sdk.SDKAPI + sdkAPI *SDKAPI cfg *ackgenconfig.Config Names names.Names Kind string @@ -658,7 +656,7 @@ func (r *CRD) ListOpMatchFieldNames() []string { // GetAllRenames returns all the field renames observed in the generator config // for a given OpType. -func (r *CRD) GetAllRenames(op operations.OpType) (map[string]string, error) { +func (r *CRD) GetAllRenames(op OpType) (map[string]string, error) { renames := make(map[string]string) resourceConfig, ok := r.cfg.Resources[r.Names.Original] if !ok { @@ -751,7 +749,7 @@ func (r *CRD) GetSanitizedMemberPath( // NewCRD returns a pointer to a new `ackmodel.CRD` struct that describes a // single top-level resource in an AWS service API func NewCRD( - sdkAPI *sdk.SDKAPI, + sdkAPI *SDKAPI, cfg *ackgenconfig.Config, crdNames names.Names, ops Ops, diff --git a/pkg/model/model.go b/pkg/model/model.go index f83e261a..2a67d968 100644 --- a/pkg/model/model.go +++ b/pkg/model/model.go @@ -22,8 +22,6 @@ import ( ackgenconfig "github.com/aws-controllers-k8s/code-generator/pkg/generate/config" "github.com/aws-controllers-k8s/code-generator/pkg/generate/templateset" "github.com/aws-controllers-k8s/code-generator/pkg/names" - "github.com/aws-controllers-k8s/code-generator/pkg/operations" - "github.com/aws-controllers-k8s/code-generator/pkg/sdk" "github.com/aws-controllers-k8s/code-generator/pkg/util" awssdkmodel "github.com/aws/aws-sdk-go/private/model/api" ) @@ -36,7 +34,7 @@ var ( // Model contains the ACK model for the generator to process and apply // templates against. type Model struct { - SDKAPI *sdk.SDKAPI + SDKAPI *SDKAPI servicePackageName string apiVersion string crds []*CRD @@ -84,13 +82,13 @@ func (m *Model) GetCRDs() ([]*CRD, error) { opMap := m.SDKAPI.GetOperationMap(m.cfg) - createOps := (*opMap)[operations.OpTypeCreate] - readOneOps := (*opMap)[operations.OpTypeGet] - readManyOps := (*opMap)[operations.OpTypeList] - updateOps := (*opMap)[operations.OpTypeUpdate] - deleteOps := (*opMap)[operations.OpTypeDelete] - getAttributesOps := (*opMap)[operations.OpTypeGetAttributes] - setAttributesOps := (*opMap)[operations.OpTypeSetAttributes] + createOps := (*opMap)[OpTypeCreate] + readOneOps := (*opMap)[OpTypeGet] + readManyOps := (*opMap)[OpTypeList] + updateOps := (*opMap)[OpTypeUpdate] + deleteOps := (*opMap)[OpTypeDelete] + getAttributesOps := (*opMap)[OpTypeGetAttributes] + setAttributesOps := (*opMap)[OpTypeSetAttributes] for crdName, createOp := range createOps { if m.cfg.IsIgnoredResource(crdName) { @@ -311,7 +309,7 @@ func (m *Model) GetTypeDefs() ([]*TypeDef, error) { } tdefNames := names.New(shapeName) if m.SDKAPI.HasConflictingTypeName(shapeName, m.cfg) { - tdefNames.Camel += sdk.ConflictingNameSuffix + tdefNames.Camel += ConflictingNameSuffix trenames[shapeName] = tdefNames.Camel } @@ -367,7 +365,7 @@ func (m *Model) getShapeCleanGoType(shape *awssdkmodel.Shape) string { goType := shape.GoType() typeNames := names.New(goType) if m.SDKAPI.HasConflictingTypeName(goType, m.cfg) { - typeNames.Camel += sdk.ConflictingNameSuffix + typeNames.Camel += ConflictingNameSuffix } return "*" + typeNames.Camel default: @@ -643,7 +641,7 @@ func (m *Model) GetEnumDefs() ([]*EnumDef, error) { // Handle name conflicts with top-level CRD.Spec or CRD.Status // types if m.SDKAPI.HasConflictingTypeName(shapeName, m.cfg) { - enumNames.Camel += sdk.ConflictingNameSuffix + enumNames.Camel += ConflictingNameSuffix } edef, err := NewEnumDef(enumNames, shape.Enum) if err != nil { @@ -707,7 +705,7 @@ func (m *Model) APIGroup() string { // Optionally, pass a file path to a generator config file that can be used to // instruct the code generator how to handle the API properly func New( - SDKAPI *sdk.SDKAPI, + SDKAPI *SDKAPI, servicePackageName string, apiVersion string, cfg ackgenconfig.Config, diff --git a/pkg/model/multiversion/delta.go b/pkg/model/multiversion/delta.go index 174468a4..865e9b1c 100644 --- a/pkg/model/multiversion/delta.go +++ b/pkg/model/multiversion/delta.go @@ -20,7 +20,6 @@ import ( awssdkmodel "github.com/aws/aws-sdk-go/private/model/api" ackmodel "github.com/aws-controllers-k8s/code-generator/pkg/model" - ackoperations "github.com/aws-controllers-k8s/code-generator/pkg/operations" ) // FieldChangeType represents the type of field modification. @@ -70,12 +69,12 @@ type CRDDelta struct { // spec and status fields deltas. src is the CRD of the spoke (source) version // and dst is the CRD of the hub (destination) version. func ComputeCRDFieldDeltas(src, dst *ackmodel.CRD) (*CRDDelta, error) { - dstRenames, err := dst.GetAllRenames(ackoperations.OpTypeCreate) + dstRenames, err := dst.GetAllRenames(ackmodel.OpTypeCreate) if err != nil { return nil, fmt.Errorf("cannot get resource field renames: %s", err) } - srcRenames, err := src.GetAllRenames(ackoperations.OpTypeCreate) + srcRenames, err := src.GetAllRenames(ackmodel.OpTypeCreate) if err != nil { return nil, fmt.Errorf("cannot get resource field renames: %s", err) } diff --git a/pkg/model/multiversion/delta_test.go b/pkg/model/multiversion/delta_test.go index 79e1adb5..8043af06 100644 --- a/pkg/model/multiversion/delta_test.go +++ b/pkg/model/multiversion/delta_test.go @@ -21,8 +21,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + ackmodel "github.com/aws-controllers-k8s/code-generator/pkg/model" "github.com/aws-controllers-k8s/code-generator/pkg/model/multiversion" - ackoperations "github.com/aws-controllers-k8s/code-generator/pkg/operations" "github.com/aws-controllers-k8s/code-generator/pkg/testutil" ) @@ -385,9 +385,9 @@ func TestComputeFieldsDiff_ECR(t *testing.T) { field.ShapeRef.Shape = newEmptyStructShape(tt.args.src.mutateShape) } - srcRenames, err := srcCRD.GetAllRenames(ackoperations.OpTypeCreate) + srcRenames, err := srcCRD.GetAllRenames(ackmodel.OpTypeCreate) require.Nil(err) - dstRenames, err := dstCRD.GetAllRenames(ackoperations.OpTypeCreate) + dstRenames, err := dstCRD.GetAllRenames(ackmodel.OpTypeCreate) require.Nil(err) renames, err := multiversion.ComputeRenamesDelta(srcRenames, dstRenames) require.Nil(err) diff --git a/pkg/operations/op.go b/pkg/model/op.go similarity index 99% rename from pkg/operations/op.go rename to pkg/model/op.go index 50ce8411..8a54917e 100644 --- a/pkg/operations/op.go +++ b/pkg/model/op.go @@ -11,7 +11,7 @@ // express or implied. See the License for the specific language governing // permissions and limitations under the License. -package operations +package model import ( "strings" diff --git a/pkg/operations/op_test.go b/pkg/model/op_test.go similarity index 85% rename from pkg/operations/op_test.go rename to pkg/model/op_test.go index d73f90a7..5eca215f 100644 --- a/pkg/operations/op_test.go +++ b/pkg/model/op_test.go @@ -11,7 +11,7 @@ // express or implied. See the License for the specific language governing // permissions and limitations under the License. -package operations_test +package model_test import ( "testing" @@ -29,82 +29,82 @@ func TestGetOpTypeAndResourceNameFromOpID(t *testing.T) { tests := []struct { opID string - expOpType operations.OpType + expOpType model.OpType expResName string }{ { "CreateTopic", - operations.OpTypeCreate, + model.OpTypeCreate, "Topic", }, { "CreateOrUpdateTopic", - operations.OpTypeReplace, + model.OpTypeReplace, "Topic", }, { "CreateBatchTopics", - operations.OpTypeCreateBatch, + model.OpTypeCreateBatch, "Topic", }, { "CreateBatchTopic", - operations.OpTypeCreateBatch, + model.OpTypeCreateBatch, "Topic", }, { "BatchCreateTopics", - operations.OpTypeCreateBatch, + model.OpTypeCreateBatch, "Topic", }, { "BatchCreateTopic", - operations.OpTypeCreateBatch, + model.OpTypeCreateBatch, "Topic", }, { "CreateTopics", - operations.OpTypeCreateBatch, + model.OpTypeCreateBatch, "Topic", }, { "DescribeEC2Instances", - operations.OpTypeList, + model.OpTypeList, "EC2Instance", }, { "DescribeEC2Instance", - operations.OpTypeGet, + model.OpTypeGet, "EC2Instance", }, { "UpdateTopic", - operations.OpTypeUpdate, + model.OpTypeUpdate, "Topic", }, { "DeleteTopic", - operations.OpTypeDelete, + model.OpTypeDelete, "Topic", }, { "DescribeInstances", - operations.OpTypeList, + model.OpTypeList, "Instance", }, { "ListDeploymentGroups", - operations.OpTypeList, + model.OpTypeList, "DeploymentGroup", }, { "GetDeployment", - operations.OpTypeGet, + model.OpTypeGet, "Deployment", }, { "PauseEC2Instance", - operations.OpTypeUnknown, + model.OpTypeUnknown, "PauseEC2Instance", }, // Heuristic should incorrectly parse DhcpOptions ops diff --git a/pkg/model/sdk_api.go b/pkg/model/sdk_api.go new file mode 100644 index 00000000..66d3ca18 --- /dev/null +++ b/pkg/model/sdk_api.go @@ -0,0 +1,268 @@ +// 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. + +package model + +import ( + "strings" + + ackgenconfig "github.com/aws-controllers-k8s/code-generator/pkg/generate/config" + "github.com/aws-controllers-k8s/code-generator/pkg/names" + "github.com/aws-controllers-k8s/code-generator/pkg/util" + awssdkmodel "github.com/aws/aws-sdk-go/private/model/api" +) + +const ( + // ConflictingNameSuffix is appended to type names when they overlap with + // well-known common struct names for things like a CRD itself, or its + // Spec/Status subfield struct type name. + ConflictingNameSuffix = "_SDK" +) + +// SDKAPI contains an API model for a single AWS service API +type SDKAPI struct { + API *awssdkmodel.API + APIGroupSuffix string + // A map of operation type and resource name to + // aws-sdk-go/private/model/api.Operation structs + opMap *OperationMap + // Map, keyed by original Shape GoTypeElem(), with the values being a + // renamed type name (due to conflicting names) + typeRenames map[string]string + // Default is "services.k8s.aws" +} + +// GetPayloads returns a slice of strings of Shape names representing input and +// output request/response payloads +func (a *SDKAPI) GetPayloads() []string { + res := []string{} + for _, op := range a.API.Operations { + res = append(res, op.InputRef.ShapeName) + res = append(res, op.OutputRef.ShapeName) + } + return res +} + +// GetOperationMap returns a map, keyed by the operation type and operation +// ID/name, of aws-sdk-go private/model/api.Operation struct pointers +func (a *SDKAPI) GetOperationMap(cfg *ackgenconfig.Config) *OperationMap { + if a.opMap != nil { + return a.opMap + } + // create an index of Operations by operation types and resource name + opMap := OperationMap{} + for opID, op := range a.API.Operations { + opTypeArray, resName := getOpTypeAndResourceName(opID, cfg) + for _, opType := range opTypeArray { + if _, found := opMap[opType]; !found { + opMap[opType] = map[string]*awssdkmodel.Operation{} + } + opMap[opType][resName] = op + } + } + a.opMap = &opMap + return &opMap +} + +// GetInputShapeRef finds a ShapeRef for a supplied member path (dot-notation) +// for given API operation +func (a *SDKAPI) GetInputShapeRef( + opID string, + path string, +) (*awssdkmodel.ShapeRef, bool) { + op, ok := a.API.Operations[opID] + if !ok { + return nil, false + } + return getMemberByPath(op.InputRef.Shape, path) +} + +// GetOutputShapeRef finds a ShapeRef for a supplied member path (dot-notation) +// for given API operation +func (a *SDKAPI) GetOutputShapeRef( + opID string, + path string, +) (*awssdkmodel.ShapeRef, bool) { + op, ok := a.API.Operations[opID] + if !ok { + return nil, false + } + return getMemberByPath(op.OutputRef.Shape, path) +} + +// CRDNames returns a slice of names structs for all top-level resources in the +// API +func (a *SDKAPI) CRDNames(cfg *ackgenconfig.Config) []names.Names { + opMap := a.GetOperationMap(cfg) + createOps := (*opMap)[OpTypeCreate] + crdNames := []names.Names{} + for crdName := range createOps { + if cfg.IsIgnoredResource(crdName) { + continue + } + crdNames = append(crdNames, names.New(crdName)) + } + return crdNames +} + +// GetTypeRenames returns a map of original type name to renamed name (some +// type definition names conflict with generated names) +func (a *SDKAPI) GetTypeRenames(cfg *ackgenconfig.Config) map[string]string { + if a.typeRenames != nil { + return a.typeRenames + } + + trenames := map[string]string{} + + payloads := a.GetPayloads() + + for shapeName, shape := range a.API.Shapes { + if util.InStrings(shapeName, payloads) { + // Payloads are not type defs + continue + } + if shape.Type != "structure" { + continue + } + if shape.Exception { + // Neither are exceptions + continue + } + tdefNames := names.New(shapeName) + if a.HasConflictingTypeName(shapeName, cfg) { + tdefNames.Camel += ConflictingNameSuffix + trenames[shapeName] = tdefNames.Camel + } + } + a.typeRenames = trenames + return trenames +} + +// HasConflictingTypeName returns true if the supplied type name will conflict +// with any generated type in the service's API package +func (a *SDKAPI) HasConflictingTypeName(typeName string, cfg *ackgenconfig.Config) bool { + // First grab the set of CRD struct names and the names of their Spec and + // Status structs + cleanTypeName := names.New(typeName).Camel + crdNames := a.CRDNames(cfg) + crdResourceNames := []string{} + crdListResourceNames := []string{} + crdSpecNames := []string{} + crdStatusNames := []string{} + + for _, crdName := range crdNames { + cleanResourceName := crdName.Camel + crdResourceNames = append(crdResourceNames, cleanResourceName) + crdSpecNames = append(crdSpecNames, cleanResourceName+"Spec") + crdStatusNames = append(crdStatusNames, cleanResourceName+"Status") + crdListResourceNames = append(crdListResourceNames, cleanResourceName+"List") + } + return util.InStrings(cleanTypeName, crdResourceNames) || + util.InStrings(cleanTypeName, crdSpecNames) || + util.InStrings(cleanTypeName, crdStatusNames) || + util.InStrings(cleanTypeName, crdListResourceNames) +} + +// ServiceID returns the exact `metadata.serviceId` attribute for the AWS +// service APi's api-2.json file. +// This MAY NOT MATCH the AWS SDK Go package used by the service. For example: +// AWS SDK Go uses `opensearchservice` whereas the service ID is `opensearch` +func (a *SDKAPI) ServiceID() string { + if a == nil || a.API == nil { + return "" + } + return awssdkmodel.ServiceID(a.API) +} + +func (a *SDKAPI) GetServiceFullName() string { + if a == nil || a.API == nil { + return "" + } + return a.API.Metadata.ServiceFullName +} + +// APIInterfaceTypeName returns the name of the aws-sdk-go primary API +// interface type name. +func (a *SDKAPI) APIInterfaceTypeName() string { + if a == nil || a.API == nil { + return "" + } + return a.API.StructName() +} + +// NewSDKAPI returns a pointer to a new `ackmodel.SDKAPI` struct that describes +// the AWS SDK API and its respective groupings, mappings and renamings. +func NewSDKAPI(api *awssdkmodel.API, apiGroupSuffix string) *SDKAPI { + return &SDKAPI{ + API: api, + APIGroupSuffix: apiGroupSuffix, + opMap: nil, + typeRenames: nil, + } +} + +// Override the operation type and/or resource name if specified in config +func getOpTypeAndResourceName(opID string, cfg *ackgenconfig.Config) ([]OpType, string) { + opType, resName := GetOpTypeAndResourceNameFromOpID(opID, cfg) + opTypes := []OpType{opType} + + if cfg == nil { + return opTypes, resName + } + if operationConfig, exists := cfg.Operations[opID]; exists { + if operationConfig.ResourceName != "" { + resName = operationConfig.ResourceName + } + + for _, operationType := range operationConfig.OperationType { + opType = OpTypeFromString(operationType) + opTypes = append(opTypes, opType) + } + } + return opTypes, resName +} + +// getMemberByPath returns a ShapeRef given a root Shape and a dot-notation +// object search path. Given the explicit type check for list type members +// both ".." and "." notations work currently. +// TODO: Add support for other types such as map. +func getMemberByPath( + shape *awssdkmodel.Shape, + path string, +) (*awssdkmodel.ShapeRef, bool) { + elements := strings.Split(path, ".") + last := len(elements) - 1 + for x, elem := range elements { + if elem == "" { + continue + } + if shape == nil { + return nil, false + } + shapeRef, ok := shape.MemberRefs[elem] + if !ok { + return nil, false + } + if x == last { + return shapeRef, true + } + elemType := shapeRef.Shape.Type + switch elemType { + case "list": + shape = shapeRef.Shape.MemberRef.Shape + default: + shape = shapeRef.Shape + } + } + return nil, false +} diff --git a/pkg/model/types.go b/pkg/model/types.go index af435004..5301ebc8 100644 --- a/pkg/model/types.go +++ b/pkg/model/types.go @@ -20,14 +20,13 @@ import ( ackgenconfig "github.com/aws-controllers-k8s/code-generator/pkg/generate/config" "github.com/aws-controllers-k8s/code-generator/pkg/names" - "github.com/aws-controllers-k8s/code-generator/pkg/sdk" ) // CleanGoType returns a tuple of three strings representing the normalized Go // types in "element", "normal" and "with package name" format for a particular // Shape. func CleanGoType( - api *sdk.SDKAPI, + api *SDKAPI, cfg *ackgenconfig.Config, shape *awssdkmodel.Shape, fieldCfg *ackgenconfig.FieldConfig, diff --git a/pkg/sdk/helper.go b/pkg/sdk/helper.go index 68b36287..a7d7a4ca 100644 --- a/pkg/sdk/helper.go +++ b/pkg/sdk/helper.go @@ -20,13 +20,10 @@ import ( "os" "path/filepath" "sort" - "strings" "gopkg.in/src-d/go-git.v4" - ackgenconfig "github.com/aws-controllers-k8s/code-generator/pkg/generate/config" - "github.com/aws-controllers-k8s/code-generator/pkg/names" - "github.com/aws-controllers-k8s/code-generator/pkg/operations" + "github.com/aws-controllers-k8s/code-generator/pkg/model" "github.com/aws-controllers-k8s/code-generator/pkg/util" awssdkmodel "github.com/aws/aws-sdk-go/private/model/api" @@ -47,13 +44,6 @@ var ( ) ) -const ( - // ConflictingNameSuffix is appended to type names when they overlap with - // well-known common struct names for things like a CRD itself, or its - // Spec/Status subfield struct type name. - ConflictingNameSuffix = "_SDK" -) - // Helper is a helper struct that helps work with the aws-sdk-go models and // API model loader type Helper struct { @@ -101,7 +91,7 @@ func (h *Helper) WithAPIVersion(apiVersion string) { } // API returns the aws-sdk-go API model for a supplied service model name. -func (h *Helper) API(serviceModelName string) (*SDKAPI, error) { +func (h *Helper) API(serviceModelName string) (*model.SDKAPI, error) { modelPath, _, err := h.ModelAndDocsPath(serviceModelName) if err != nil { return nil, err @@ -120,7 +110,7 @@ func (h *Helper) API(serviceModelName string) (*SDKAPI, error) { // Calling API.ServicePackageDoc() ends up resetting the API.imports // unexported map variable... _ = api.ServicePackageDoc() - return &SDKAPI{api, h.APIGroupSuffix, nil, nil}, nil + return model.NewSDKAPI(api, h.APIGroupSuffix), nil } return nil, ErrServiceNotFound } @@ -181,230 +171,3 @@ func (h *Helper) GetAPIVersions(serviceModelName string) ([]string, error) { } return versions, nil } - -// SDKAPI contains an API model for a single AWS service API -type SDKAPI struct { - API *awssdkmodel.API - APIGroupSuffix string - // A map of operation type and resource name to - // aws-sdk-go/private/model/api.Operation structs - opMap *operations.OperationMap - // Map, keyed by original Shape GoTypeElem(), with the values being a - // renamed type name (due to conflicting names) - typeRenames map[string]string - // Default is "services.k8s.aws" -} - -// GetPayloads returns a slice of strings of Shape names representing input and -// output request/response payloads -func (a *SDKAPI) GetPayloads() []string { - res := []string{} - for _, op := range a.API.Operations { - res = append(res, op.InputRef.ShapeName) - res = append(res, op.OutputRef.ShapeName) - } - return res -} - -// GetOperationMap returns a map, keyed by the operation type and operation -// ID/name, of aws-sdk-go private/model/api.Operation struct pointers -func (a *SDKAPI) GetOperationMap(cfg *ackgenconfig.Config) *operations.OperationMap { - if a.opMap != nil { - return a.opMap - } - // create an index of Operations by operation types and resource name - opMap := operations.OperationMap{} - for opID, op := range a.API.Operations { - opTypeArray, resName := getOpTypeAndResourceName(opID, cfg) - for _, opType := range opTypeArray { - if _, found := opMap[opType]; !found { - opMap[opType] = map[string]*awssdkmodel.Operation{} - } - opMap[opType][resName] = op - } - } - a.opMap = &opMap - return &opMap -} - -// GetInputShapeRef finds a ShapeRef for a supplied member path (dot-notation) -// for given API operation -func (a *SDKAPI) GetInputShapeRef( - opID string, - path string, -) (*awssdkmodel.ShapeRef, bool) { - op, ok := a.API.Operations[opID] - if !ok { - return nil, false - } - return getMemberByPath(op.InputRef.Shape, path) -} - -// GetOutputShapeRef finds a ShapeRef for a supplied member path (dot-notation) -// for given API operation -func (a *SDKAPI) GetOutputShapeRef( - opID string, - path string, -) (*awssdkmodel.ShapeRef, bool) { - op, ok := a.API.Operations[opID] - if !ok { - return nil, false - } - return getMemberByPath(op.OutputRef.Shape, path) -} - -// getMemberByPath returns a ShapeRef given a root Shape and a dot-notation -// object search path. Given the explicit type check for list type members -// both ".." and "." notations work currently. -// TODO: Add support for other types such as map. -func getMemberByPath( - shape *awssdkmodel.Shape, - path string, -) (*awssdkmodel.ShapeRef, bool) { - elements := strings.Split(path, ".") - last := len(elements) - 1 - for x, elem := range elements { - if elem == "" { - continue - } - if shape == nil { - return nil, false - } - shapeRef, ok := shape.MemberRefs[elem] - if !ok { - return nil, false - } - if x == last { - return shapeRef, true - } - elemType := shapeRef.Shape.Type - switch elemType { - case "list": - shape = shapeRef.Shape.MemberRef.Shape - default: - shape = shapeRef.Shape - } - } - return nil, false -} - -// CRDNames returns a slice of names structs for all top-level resources in the -// API -func (a *SDKAPI) CRDNames(cfg *ackgenconfig.Config) []names.Names { - opMap := a.GetOperationMap(cfg) - createOps := (*opMap)[operations.OpTypeCreate] - crdNames := []names.Names{} - for crdName := range createOps { - if cfg.IsIgnoredResource(crdName) { - continue - } - crdNames = append(crdNames, names.New(crdName)) - } - return crdNames -} - -// GetTypeRenames returns a map of original type name to renamed name (some -// type definition names conflict with generated names) -func (a *SDKAPI) GetTypeRenames(cfg *ackgenconfig.Config) map[string]string { - if a.typeRenames != nil { - return a.typeRenames - } - - trenames := map[string]string{} - - payloads := a.GetPayloads() - - for shapeName, shape := range a.API.Shapes { - if util.InStrings(shapeName, payloads) { - // Payloads are not type defs - continue - } - if shape.Type != "structure" { - continue - } - if shape.Exception { - // Neither are exceptions - continue - } - tdefNames := names.New(shapeName) - if a.HasConflictingTypeName(shapeName, cfg) { - tdefNames.Camel += ConflictingNameSuffix - trenames[shapeName] = tdefNames.Camel - } - } - a.typeRenames = trenames - return trenames -} - -// HasConflictingTypeName returns true if the supplied type name will conflict -// with any generated type in the service's API package -func (a *SDKAPI) HasConflictingTypeName(typeName string, cfg *ackgenconfig.Config) bool { - // First grab the set of CRD struct names and the names of their Spec and - // Status structs - cleanTypeName := names.New(typeName).Camel - crdNames := a.CRDNames(cfg) - crdResourceNames := []string{} - crdListResourceNames := []string{} - crdSpecNames := []string{} - crdStatusNames := []string{} - - for _, crdName := range crdNames { - cleanResourceName := crdName.Camel - crdResourceNames = append(crdResourceNames, cleanResourceName) - crdSpecNames = append(crdSpecNames, cleanResourceName+"Spec") - crdStatusNames = append(crdStatusNames, cleanResourceName+"Status") - crdListResourceNames = append(crdListResourceNames, cleanResourceName+"List") - } - return util.InStrings(cleanTypeName, crdResourceNames) || - util.InStrings(cleanTypeName, crdSpecNames) || - util.InStrings(cleanTypeName, crdStatusNames) || - util.InStrings(cleanTypeName, crdListResourceNames) -} - -// ServiceID returns the exact `metadata.serviceId` attribute for the AWS -// service APi's api-2.json file. -// This MAY NOT MATCH the AWS SDK Go package used by the service. For example: -// AWS SDK Go uses `opensearchservice` whereas the service ID is `opensearch` -func (a *SDKAPI) ServiceID() string { - if a == nil || a.API == nil { - return "" - } - return awssdkmodel.ServiceID(a.API) -} - -func (a *SDKAPI) GetServiceFullName() string { - if a == nil || a.API == nil { - return "" - } - return a.API.Metadata.ServiceFullName -} - -// APIInterfaceTypeName returns the name of the aws-sdk-go primary API -// interface type name. -func (a *SDKAPI) APIInterfaceTypeName() string { - if a == nil || a.API == nil { - return "" - } - return a.API.StructName() -} - -// Override the operation type and/or resource name if specified in config -func getOpTypeAndResourceName(opID string, cfg *ackgenconfig.Config) ([]OpType, string) { - opType, resName := GetOpTypeAndResourceNameFromOpID(opID, cfg) - opTypes := []OpType{opType} - - if cfg == nil { - return opTypes, resName - } - if operationConfig, exists := cfg.Operations[opID]; exists { - if operationConfig.ResourceName != "" { - resName = operationConfig.ResourceName - } - - for _, operationType := range operationConfig.OperationType { - opType = operations.OpTypeFromString(operationType) - opTypes = append(opTypes, opType) - } - } - return opTypes, resName -} diff --git a/pkg/sdk/helper_test.go b/pkg/sdk/helper_test.go index 0e289ce0..2982c40f 100644 --- a/pkg/sdk/helper_test.go +++ b/pkg/sdk/helper_test.go @@ -20,14 +20,15 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "github.com/aws-controllers-k8s/code-generator/pkg/model" "github.com/aws-controllers-k8s/code-generator/pkg/sdk" ) var ( - lambda *sdk.SDKAPI + lambda *model.SDKAPI ) -func lambdaSDKAPI(t *testing.T) *sdk.SDKAPI { +func lambdaSDKAPI(t *testing.T) *model.SDKAPI { if lambda != nil { return lambda } From e31fe4f044e252008f9456e1de615bb77390cced Mon Sep 17 00:00:00 2001 From: Nicholas Thomson Date: Wed, 20 Oct 2021 16:06:44 -0700 Subject: [PATCH 6/7] Undo moving import --- pkg/model/types_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/model/types_test.go b/pkg/model/types_test.go index 9c7bb6d8..f2adb17d 100644 --- a/pkg/model/types_test.go +++ b/pkg/model/types_test.go @@ -3,8 +3,9 @@ package model_test import ( "testing" - "github.com/aws-controllers-k8s/code-generator/pkg/model" "github.com/stretchr/testify/assert" + + "github.com/aws-controllers-k8s/code-generator/pkg/model" ) func TestReplacePkgName(t *testing.T) { From 001d1907f95e1abdc8320f9b11789c6d987bdd8e Mon Sep 17 00:00:00 2001 From: Nicholas Thomson Date: Thu, 21 Oct 2021 10:50:55 -0700 Subject: [PATCH 7/7] Fix find and replace issues --- pkg/generate/code/set_resource.go | 4 ++-- pkg/generate/code/set_sdk.go | 2 +- pkg/model/sdk_api.go | 3 ++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/pkg/generate/code/set_resource.go b/pkg/generate/code/set_resource.go index 5d97fc4c..c8d8b911 100644 --- a/pkg/generate/code/set_resource.go +++ b/pkg/generate/code/set_resource.go @@ -307,7 +307,7 @@ func ListMemberNameInReadManyOutput( // Find the element in the output shape that contains the list of // resources. This heuristic is simplistic (just look for the field with a // list type) but seems to be followed consistently by the aws-sdk-go for - // List model. + // List operations. for memberName, memberShapeRef := range r.Ops.ReadMany.OutputRef.Shape.MemberRefs { if memberShapeRef.Shape.Type == "list" { return memberName @@ -397,7 +397,7 @@ func setResourceReadMany( // Find the element in the output shape that contains the list of // resources. This heuristic is simplistic (just look for the field with a // list type) but seems to be followed consistently by the aws-sdk-go for - // List model. + // List operations. for memberName, memberShapeRef := range outputShape.MemberRefs { if memberShapeRef.Shape.Type == "list" { listShapeName = memberName diff --git a/pkg/generate/code/set_sdk.go b/pkg/generate/code/set_sdk.go index 2abfad13..551b5358 100644 --- a/pkg/generate/code/set_sdk.go +++ b/pkg/generate/code/set_sdk.go @@ -1314,7 +1314,7 @@ func varEmptyConstructorK8sType( // setSDKForScalar returns the Go code that sets the value of a target variable // or field to a scalar value. For target variables that are structs, we output // the aws-sdk-go's common SetXXX() method. For everything else, we output -// normal assignment model. +// normal assignment operations. func setSDKForScalar( cfg *ackgenconfig.Config, r *model.CRD, diff --git a/pkg/model/sdk_api.go b/pkg/model/sdk_api.go index 66d3ca18..f14ad5d5 100644 --- a/pkg/model/sdk_api.go +++ b/pkg/model/sdk_api.go @@ -16,10 +16,11 @@ package model import ( "strings" + awssdkmodel "github.com/aws/aws-sdk-go/private/model/api" + ackgenconfig "github.com/aws-controllers-k8s/code-generator/pkg/generate/config" "github.com/aws-controllers-k8s/code-generator/pkg/names" "github.com/aws-controllers-k8s/code-generator/pkg/util" - awssdkmodel "github.com/aws/aws-sdk-go/private/model/api" ) const (