Skip to content

Commit

Permalink
Add auto-mapping (#2509)
Browse files Browse the repository at this point in the history
  • Loading branch information
iwahbe committed May 9, 2023
1 parent 0b881b4 commit 938cf19
Show file tree
Hide file tree
Showing 3 changed files with 202 additions and 11 deletions.
1 change: 1 addition & 0 deletions provider/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ require (
github.com/Azure/go-autorest/tracing v0.6.0 // indirect
github.com/AzureAD/microsoft-authentication-library-for-go v0.4.0 // indirect
github.com/Masterminds/goutils v1.1.1 // indirect
github.com/Masterminds/semver v1.5.0 // indirect
github.com/Masterminds/semver/v3 v3.1.1 // indirect
github.com/Masterminds/sprig/v3 v3.2.1 // indirect
github.com/Microsoft/go-winio v0.5.2 // indirect
Expand Down
1 change: 1 addition & 0 deletions provider/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,7 @@ github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go
github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI=
github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU=
github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww=
github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc=
github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs=
github.com/Masterminds/sprig/v3 v3.2.1 h1:n6EPaDyLSvCEa3frruQvAiHuNp2dhBlMSmkEr+HuzGc=
Expand Down
211 changes: 200 additions & 11 deletions provider/resources.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,13 @@ import (
"github.com/mitchellh/go-homedir"
"github.com/pulumi/pulumi-aws/provider/v5/pkg/version"
"github.com/pulumi/pulumi-terraform-bridge/v3/pkg/tfbridge"
"github.com/pulumi/pulumi-terraform-bridge/v3/pkg/tfbridge/x"
shim "github.com/pulumi/pulumi-terraform-bridge/v3/pkg/tfshim"
shimv2 "github.com/pulumi/pulumi-terraform-bridge/v3/pkg/tfshim/sdk-v2"
"github.com/pulumi/pulumi/pkg/v3/codegen/schema"
"github.com/pulumi/pulumi/sdk/v3/go/common/resource"
"github.com/pulumi/pulumi/sdk/v3/go/common/tokens"
"github.com/pulumi/pulumi/sdk/v3/go/common/util/contract"
)

// all of the AWS token components used below.
Expand All @@ -50,7 +52,6 @@ const (
amplifyMod = "Amplify" // Amplify
appFlowMod = "AppFlow" // AppFlow
appConfigMod = "AppConfig" // AppConfig
appIntegrationsMod = "AppIntegrations" // AppIntegrations
applicationInsightsMod = "ApplicationInsights" // Cloudwatch Application Insights
appStreamMod = "AppStream" // AppStream
appsyncMod = "AppSync" // AppSync
Expand Down Expand Up @@ -232,6 +233,198 @@ const (
legacyElbv2Mod = "ElasticLoadBalancingV2"
)

var moduleMap = map[string]string{
// Ignored: ec2Mod. The ec2Mod includes tokens from:
// - "aws_eip"
// - "aws_flow_log"
// - "aws_ami_copy"
//
// It's not clear what the auto-token should be.

// We don't map legacy modules

"acm": acmMod,
"acmpca": acmpcaMod,
"account": accountMod,
"accessanalyzer": accessAnalyzerMod,
"prometheus": ampMod,
"amplify": amplifyMod,
"appflow": appFlowMod,
"appconfig": appConfigMod,
"applicationinsights": applicationInsightsMod,
"appstream": appStreamMod,
"appsync": appsyncMod,
"appmesh": appmeshMod,
"api_gateway": apigatewayMod,
"apigatewayv2": apigatewayv2Mod,
"appautoscaling": appautoscalingMod,
"apprunner": appRunnerMod,
"athena": athenaMod,
"autoscaling": autoscalingMod,
"autoscalingplans": autoscalingPlansMod,
"backup": backupMod,
"batch": batchMod,
"budgets": budgetsMod,
"chime": chimeMod,
"chimesdkmediapipelines": chimeSDKMediaPipelinesMod,
"cloud9": cloud9Mod,
"cloudcontrolapi": cloudControlMod,
"cloudformation": cloudformationMod,
"cloudhsm_v2": cloudhsmv2Mod,
"cloudfront": cloudfrontMod,
"cloudsearch": cloudsearchMod,
"cloudtrail": cloudtrailMod,
"cloudwatch": cloudwatchMod,
"codeartifact": codeartifactMod,
"codebuild": codebuildMod,
"codecommit": codecommitMod,
"codedeploy": codedeployMod,
"codegurureviewer": codeguruReviewerMod,
"codepipeline": codepipelineMod,
"codestarconnections": codestarConnectionsMod,
"codestarnotifications": codestarNotificationsMod,
"cognito": cognitoMod,
"comprehend": comprehendMod,
"connect": connectMod,
"controltower": controlTowerMod,
"ce": costExplorerMod,
"cur": curMod,
"config": cfgMod,
"dataexchange": dataexchangeMod,
"datapipeline": datapipelineMod,
"datasync": datasyncMod,
"dax": daxMod,
"dlm": dlmMod,
"detective": detectiveMod,
"devicefarm": devicefarmMod,
"directory_service": directoryserviceMod,
"docdb": docdbMod,
"dynamodb": dynamodbMod,
"dx": dxMod,
"dms": dmsMod,
"ebs": ebsMod,
"ec2_client_vpn": ec2ClientVpnMod,
"ec2_transit_gateway": ec2TransitGatewayMod,
"ecr": ecrMod,
"ecrpublic": ecrPublicMod,
"ecs": ecsMod,
"efs": efsMod,
"eks": eksMod,
"elasticache": elasticacheMod,
"elastic_beanstalk": elasticbeanstalkMod,
"elasticsearch": elasticsearchMod,
"elastictranscoder": elastictranscoderMod,
"elb": elbMod,
"evidently": evidentlyMod,
"alb": albMod,
"lb": lbMod,
"emr": emrMod,
"emrcontainers": emrContainersMod,
"emrserverless": emrServerlessMod,
"fis": fisMod,
"fms": fmsMod,
"fsx": fsxMod,
"gamelift": gameliftMod,
"glacier": glacierMod,
"globalaccelerator": globalacceleratorMod,
"glue": glueMod,
"grafana": grafanaMod,
"guardduty": guarddutyMod,
"iam": iamMod,
"identitystore": identityStoreMod,
"imagebuilder": imageBuilderMod,
"inspector": inspectorMod,
"inspector2": inspector2Mod,
"iot": iotMod,
"ivs": ivsMod,
"ivschat": ivsChatMod,
"kendra": kendraMod,
"keyspaces": keyspacesMod,
"kinesis": kinesisMod,
"kinesisanalyticsv2": kinesisAnalyticsMod,
"kms": kmsMod,
"lakeformation": lakeFormationMod,
"lambda": lambdaMod,
"lex": lexMod,
"licensemanager": licensemanagerMod,
"lightsail": lightsailMod,
"location": locationMod,
"macie": macieMod,
"macie2": macie2Mod,
"media_convert": mediaconvertMod,
"medialive": medialiveMod,
"media_package": mediapackageMod,
"media_store": mediastoreMod,
"memorydb": memoryDbMod,
"mq": mqMod,
"msk": mskMod,
"mskconnect": mskConnectMod,
"mwaa": mwaaMod,
"neptune": neptuneMod,
"networkfirewall": networkFirewallMod,
"networkmanager": networkManagerMod,
"oam": oamMod,
"opensearch": opensearchMod,
"opsworks": opsworksMod,
"organizations": organizationsMod,
"outposts": outpostsMod,
"pinpoint": pinpointMod,
"pipes": pipesMod,
"pricing": pricingMod,
"qldb": qldbMod,
"quicksight": quicksightMod,
"ram": ramMod,
"rbin": rbinMod,
"rds": rdsMod,
"redshift": redshiftMod,
"redshiftdata": redshiftDataMod,
"redshiftserverless": redshiftServerlessMod,
"resourcegroups": resourcegroupsMod,
"resourcegroupstaggingapi": resourcegroupsTaggingApiMod,
"rolesanywhere": rolesAnywhereMod,
"route53": route53Mod,
"route53recoverycontrolconfig": route53RecoveryControlMod,
"route53recoveryreadiness": route53RecoveryReadinessMod,
"route53domains": route53DomainsMod,
"rum": rumMod,
"sagemaker": sagemakerMod,
"scheduler": schedulerMod,
"schemas": schemasMod,
"securityhub": securityhubMod,
"serverlessapplicationrepository": serverlessRepositoryMod,
"ses": sesMod,
"sesv2": sesV2Mod,
"signer": signerMod,
"s3": s3Mod,
"s3control": s3ControlMod,
"s3outposts": s3OutpostsMod,
"ssm": ssmMod,
"ssmincidents": ssmIncidentsMod,
"secretsmanager": secretsmanagerMod,
"servicecatalog": servicecatalogMod,
"service_discovery": servicediscoveryMod,
"servicequotas": servicequotasMod,
"sfn": sfnMod,
"shield": shieldMod,
"simpledb": simpledbMod,
"sns": snsMod,
"sqs": sqsMod,
"ssoadmin": ssoAdminMod,
"storagegateway": storagegatewayMod,
"swf": swfMod,
"synthetics": syntheticsMod,
"timestreamwrite": timestreamWriteMod,
"transcribe": transcribeMod,
"transfer": transferMod,
"vpclattice": vpclatticeMod,
"waf": wafMod,
"wafv2": wafV2Mod,
"wafregional": wafregionalMod,
"worklink": worklinkMod,
"workspaces": workspacesMod,
"xray": xrayMod,
}

var namespaceMap = map[string]string{
"aws": "Aws",
}
Expand Down Expand Up @@ -480,7 +673,6 @@ func Provider() tfbridge.ProviderInfo {
PreConfigureCallback: preConfigureCallback,
Resources: map[string]*tfbridge.ResourceInfo{
// AWS Certificate Manager
"aws_acm_certificate": {Tok: awsResource(acmMod, "Certificate")},
"aws_acm_certificate_validation": {
Tok: awsResource(acmMod, "CertificateValidation"),
Docs: &tfbridge.DocInfo{
Expand All @@ -497,9 +689,6 @@ func Provider() tfbridge.ProviderInfo {
},
},
},
"aws_acmpca_certificate_authority_certificate": {
Tok: awsResource(acmpcaMod, "CertificateAuthorityCertificate"),
},
"aws_acmpca_policy": {
Tok: awsResource(acmpcaMod, "Policy"),
Fields: map[string]*tfbridge.SchemaInfo{
Expand All @@ -508,7 +697,6 @@ func Provider() tfbridge.ProviderInfo {
},
},
},
"aws_acmpca_permission": {Tok: awsResource(acmpcaMod, "Permission")},
// Account
"aws_account_alternate_contact": {Tok: awsResource(accountMod, "AlternativeContact")},
// AppSync
Expand Down Expand Up @@ -553,8 +741,6 @@ func Provider() tfbridge.ProviderInfo {
},
},
},
"aws_appsync_resolver": {Tok: awsResource(appsyncMod, "Resolver")},
"aws_appsync_api_cache": {Tok: awsResource(appsyncMod, "ApiCache")},
"aws_appsync_domain_name": {
Tok: awsResource(appsyncMod, "DomainName"),
Fields: map[string]*tfbridge.SchemaInfo{
Expand Down Expand Up @@ -962,7 +1148,6 @@ func Provider() tfbridge.ProviderInfo {
},
},
},
"aws_budgets_budget_action": {Tok: awsResource(budgetsMod, "BudgetAction")},
// Chime
"aws_chime_voice_connector": {Tok: awsResource(chimeMod, "VoiceConnector")},
"aws_chime_voice_connector_group": {Tok: awsResource(chimeMod, "VoiceConnectorGroup")},
Expand Down Expand Up @@ -1003,8 +1188,6 @@ func Provider() tfbridge.ProviderInfo {
},
},
// CloudFront
"aws_cloudfront_distribution": {Tok: awsResource(cloudfrontMod, "Distribution")},
"aws_cloudfront_public_key": {Tok: awsResource(cloudfrontMod, "PublicKey")},
"aws_cloudfront_origin_access_identity": {Tok: awsResource(cloudfrontMod, "OriginAccessIdentity")},
"aws_cloudfront_origin_request_policy": {Tok: awsResource(cloudfrontMod, "OriginRequestPolicy")},
"aws_cloudfront_cache_policy": {Tok: awsResource(cloudfrontMod, "CachePolicy")},
Expand Down Expand Up @@ -6796,6 +6979,12 @@ func Provider() tfbridge.ProviderInfo {
prov.RenameDataSource("aws_canonical_user_id", awsDataSource(awsMod, "getCanonicalUserId"),
awsDataSource(s3Mod, "getCanonicalUserId"), awsMod, s3Mod, nil)

err := x.ComputeDefaults(&prov, x.TokensMappedModules("aws_", "", moduleMap,
func(mod, name string) (string, error) {
return awsResource(mod, name).String(), nil
}))
contract.AssertNoErrorf(err, "failed to apply default token mappings")

prov.SetAutonaming(255, "-")

// Add a CSharp-specific override for aws_s3_bucket.bucket.
Expand Down

0 comments on commit 938cf19

Please sign in to comment.