From be2baaf4e6a4846fbb2cbc62520920f2449aacbe Mon Sep 17 00:00:00 2001 From: ocobleseqx Date: Wed, 6 Mar 2024 12:07:03 +0100 Subject: [PATCH 1/5] provide pulumi resource version to tf provider Signed-off-by: ocobleseqx --- patches/0002-shim-to-expose-internal-provider.patch | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/patches/0002-shim-to-expose-internal-provider.patch b/patches/0002-shim-to-expose-internal-provider.patch index 295cb2b3b..edc60ba56 100644 --- a/patches/0002-shim-to-expose-internal-provider.patch +++ b/patches/0002-shim-to-expose-internal-provider.patch @@ -7,20 +7,17 @@ Signed-off-by: ocobleseqx diff --git a/shim/shim.go b/shim/shim.go new file mode 100644 -index 0000000..2c0816b +index 0000000..fc924d4 --- /dev/null +++ b/shim/shim.go -@@ -0,0 +1,26 @@ +@@ -0,0 +1,23 @@ +package shim + +import ( -+ "context" -+ + pfprovider "github.com/hashicorp/terraform-plugin-framework/provider" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/equinix/terraform-provider-equinix/equinix" + "github.com/equinix/terraform-provider-equinix/internal/provider" -+ "github.com/equinix/terraform-provider-equinix/version" +) + +type UpstreamProvider struct { @@ -28,9 +25,9 @@ index 0000000..2c0816b + PluginFrameworkProvider pfprovider.Provider +} + -+func NewUpstreamProvider(ctx context.Context) UpstreamProvider { ++func NewUpstreamProvider(version string) UpstreamProvider { + primary := equinix.Provider() -+ pf := provider.CreateFrameworkProvider(version.ProviderVersion) ++ pf := provider.CreateFrameworkProvider(version) + + return UpstreamProvider{ + SDKV2Provider: primary, From 04c28e3ee754f4e6072f773f66d66252a3a7e4c4 Mon Sep 17 00:00:00 2001 From: ocobleseqx Date: Wed, 6 Mar 2024 12:15:44 +0100 Subject: [PATCH 2/5] add muxer to cmd Signed-off-by: ocobleseqx --- provider/cmd/pulumi-resource-equinix/main.go | 8 ++++---- provider/cmd/pulumi-tfgen-equinix/main.go | 5 ++--- provider/resources.go | 5 ++--- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/provider/cmd/pulumi-resource-equinix/main.go b/provider/cmd/pulumi-resource-equinix/main.go index 1d9417d56..74d66347c 100644 --- a/provider/cmd/pulumi-resource-equinix/main.go +++ b/provider/cmd/pulumi-resource-equinix/main.go @@ -17,11 +17,11 @@ package main import ( + "context" _ "embed" equinix "github.com/equinix/pulumi-equinix/provider" - "github.com/equinix/pulumi-equinix/provider/pkg/version" - "github.com/pulumi/pulumi-terraform-bridge/v3/pkg/tfbridge" + pf "github.com/pulumi/pulumi-terraform-bridge/pf/tfbridge" ) //go:embed schema-embed.json @@ -29,5 +29,5 @@ var pulumiSchema []byte func main() { // Modify the path to point to the new provider - tfbridge.Main("equinix", version.Version, equinix.Provider(), pulumiSchema) -} + pf.MainWithMuxer(context.Background(), "equinix", equinix.Provider(), pulumiSchema) +} \ No newline at end of file diff --git a/provider/cmd/pulumi-tfgen-equinix/main.go b/provider/cmd/pulumi-tfgen-equinix/main.go index f7cf81c54..5f7d1dfdf 100644 --- a/provider/cmd/pulumi-tfgen-equinix/main.go +++ b/provider/cmd/pulumi-tfgen-equinix/main.go @@ -16,11 +16,10 @@ package main import ( equinix "github.com/equinix/pulumi-equinix/provider" - "github.com/equinix/pulumi-equinix/provider/pkg/version" - "github.com/pulumi/pulumi-terraform-bridge/v3/pkg/tfgen" + "github.com/pulumi/pulumi-terraform-bridge/pf/tfgen" ) func main() { // Modify the path to point to the new provider - tfgen.Main("equinix", version.Version, equinix.Provider()) + tfgen.MainWithMuxer("equinix", equinix.Provider()) } diff --git a/provider/resources.go b/provider/resources.go index 1762e0754..c77334383 100644 --- a/provider/resources.go +++ b/provider/resources.go @@ -86,13 +86,12 @@ func preConfigureCallback(vars resource.PropertyMap, c shim.ResourceConfig) erro // Provider returns additional overlaid schema and metadata associated with the provider.. func Provider() tfbridge.ProviderInfo { // Instantiate the Terraform provider - ctx := context.Background() - upstreamProvider := equinixShim.NewUpstreamProvider(ctx) + upstreamProvider := equinixShim.NewUpstreamProvider(version.Version) v2p := shimv2.NewProvider(upstreamProvider.SDKV2Provider, shimv2.WithDiffStrategy(shimv2.PlanState), shimv2.WithPlanResourceChange(func(s string) bool { return true }), ) - p := pfbridge.MuxShimWithDisjointgPF(ctx, v2p, upstreamProvider.PluginFrameworkProvider) + p := pfbridge.MuxShimWithDisjointgPF(context.Background(), v2p, upstreamProvider.PluginFrameworkProvider) // Create a Pulumi provider mapping prov := tfbridge.ProviderInfo{ From 0fd4327f0ec27d98e4340085cdc5573e5ab5ddd9 Mon Sep 17 00:00:00 2001 From: ocobleseqx Date: Wed, 6 Mar 2024 12:22:53 +0100 Subject: [PATCH 3/5] add metadata info Signed-off-by: ocobleseqx --- provider/resources.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/provider/resources.go b/provider/resources.go index c77334383..d3527e30a 100644 --- a/provider/resources.go +++ b/provider/resources.go @@ -21,6 +21,9 @@ import ( "strings" "unicode" + // embed is used to store bridge-metadata.json in the compiled binary + _ "embed" + "github.com/equinix/pulumi-equinix/provider/pkg/version" equinixShim "github.com/equinix/terraform-provider-equinix/shim" pfbridge "github.com/pulumi/pulumi-terraform-bridge/pf/tfbridge" @@ -128,6 +131,7 @@ func Provider() tfbridge.ProviderInfo { GitHubOrg: "equinix", UpstreamRepoPath: "./upstream", Version: version.Version, + MetadataInfo: tfbridge.NewProviderMetadata(metadata), Config: map[string]*tfbridge.SchemaInfo{}, PreConfigureCallback: preConfigureCallback, // IgnoreMappings is a list of TF resources and data sources to ignore in mappings errors @@ -1602,3 +1606,6 @@ func Provider() tfbridge.ProviderInfo { return prov } + +//go:embed cmd/pulumi-resource-equinix/bridge-metadata.json +var metadata []byte From 948c6d7d744c7e716ae1d4fa7566f4267e797937 Mon Sep 17 00:00:00 2001 From: ocobleseqx Date: Wed, 6 Mar 2024 12:50:27 +0100 Subject: [PATCH 4/5] generate metadata json Signed-off-by: ocobleseqx --- .../bridge-metadata.json | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 provider/cmd/pulumi-resource-equinix/bridge-metadata.json diff --git a/provider/cmd/pulumi-resource-equinix/bridge-metadata.json b/provider/cmd/pulumi-resource-equinix/bridge-metadata.json new file mode 100644 index 000000000..e2e90a8f8 --- /dev/null +++ b/provider/cmd/pulumi-resource-equinix/bridge-metadata.json @@ -0,0 +1,75 @@ +{ + "mux": { + "resources": { + "equinix:fabric/cloudRouter:CloudRouter": 0, + "equinix:fabric/connection:Connection": 0, + "equinix:fabric/network:Network": 0, + "equinix:fabric/routingProtocol:RoutingProtocol": 0, + "equinix:fabric/serviceProfile:ServiceProfile": 0, + "equinix:metal/bgpSession:BgpSession": 0, + "equinix:metal/device:Device": 0, + "equinix:metal/deviceNetworkType:DeviceNetworkType": 0, + "equinix:metal/gateway:Gateway": 1, + "equinix:metal/interconnection:Interconnection": 1, + "equinix:metal/ipAttachment:IpAttachment": 0, + "equinix:metal/organization:Organization": 0, + "equinix:metal/organizationMember:OrganizationMember": 0, + "equinix:metal/port:Port": 0, + "equinix:metal/portVlanAttachment:PortVlanAttachment": 0, + "equinix:metal/project:Project": 0, + "equinix:metal/projectApiKey:ProjectApiKey": 0, + "equinix:metal/projectSshKey:ProjectSshKey": 1, + "equinix:metal/reservedIpBlock:ReservedIpBlock": 0, + "equinix:metal/spotMarketRequest:SpotMarketRequest": 0, + "equinix:metal/sshKey:SshKey": 1, + "equinix:metal/userApiKey:UserApiKey": 0, + "equinix:metal/virtualCircuit:VirtualCircuit": 0, + "equinix:metal/vlan:Vlan": 0, + "equinix:metal/vrf:Vrf": 0, + "equinix:networkedge/aclTemplate:AclTemplate": 0, + "equinix:networkedge/bgp:Bgp": 0, + "equinix:networkedge/device:Device": 0, + "equinix:networkedge/deviceLink:DeviceLink": 0, + "equinix:networkedge/networkFile:NetworkFile": 0, + "equinix:networkedge/sshKey:SshKey": 0, + "equinix:networkedge/sshUser:SshUser": 0 + }, + "functions": { + "equinix:fabric/getCloudRouter:getCloudRouter": 0, + "equinix:fabric/getConnection:getConnection": 0, + "equinix:fabric/getNetwork:getNetwork": 0, + "equinix:fabric/getPort:getPort": 0, + "equinix:fabric/getPorts:getPorts": 0, + "equinix:fabric/getRoutingProtocol:getRoutingProtocol": 0, + "equinix:fabric/getServiceProfile:getServiceProfile": 0, + "equinix:fabric/getServiceProfiles:getServiceProfiles": 0, + "equinix:metal/getDevice:getDevice": 0, + "equinix:metal/getDeviceBgpNeighbors:getDeviceBgpNeighbors": 0, + "equinix:metal/getDevices:getDevices": 0, + "equinix:metal/getFacility:getFacility": 0, + "equinix:metal/getGateway:getGateway": 1, + "equinix:metal/getHardwareReservation:getHardwareReservation": 0, + "equinix:metal/getInterconnection:getInterconnection": 1, + "equinix:metal/getIpBlockRanges:getIpBlockRanges": 0, + "equinix:metal/getMetro:getMetro": 0, + "equinix:metal/getOperatingSystem:getOperatingSystem": 0, + "equinix:metal/getOrganization:getOrganization": 0, + "equinix:metal/getPlans:getPlans": 0, + "equinix:metal/getPort:getPort": 0, + "equinix:metal/getPrecreatedIpBlock:getPrecreatedIpBlock": 0, + "equinix:metal/getProject:getProject": 0, + "equinix:metal/getProjectSshKey:getProjectSshKey": 1, + "equinix:metal/getReservedIpBlock:getReservedIpBlock": 0, + "equinix:metal/getSpotMarketPrice:getSpotMarketPrice": 0, + "equinix:metal/getSpotMarketRequest:getSpotMarketRequest": 0, + "equinix:metal/getVirtualCircuit:getVirtualCircuit": 0, + "equinix:metal/getVlan:getVlan": 0, + "equinix:metal/getVrf:getVrf": 0, + "equinix:networkedge/getAccount:getAccount": 0, + "equinix:networkedge/getDevice:getDevice": 0, + "equinix:networkedge/getDevicePlatform:getDevicePlatform": 0, + "equinix:networkedge/getDeviceSoftware:getDeviceSoftware": 0, + "equinix:networkedge/getDeviceType:getDeviceType": 0 + } + } +} \ No newline at end of file From 501ff2b6f201cfe1aa8ccaffcd939377736be177 Mon Sep 17 00:00:00 2001 From: ocobleseqx Date: Wed, 6 Mar 2024 13:26:33 +0100 Subject: [PATCH 5/5] gofmt -w -s Signed-off-by: ocobleseqx --- provider/cmd/pulumi-resource-equinix/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/provider/cmd/pulumi-resource-equinix/main.go b/provider/cmd/pulumi-resource-equinix/main.go index 74d66347c..d382f3fe9 100644 --- a/provider/cmd/pulumi-resource-equinix/main.go +++ b/provider/cmd/pulumi-resource-equinix/main.go @@ -30,4 +30,4 @@ var pulumiSchema []byte func main() { // Modify the path to point to the new provider pf.MainWithMuxer(context.Background(), "equinix", equinix.Provider(), pulumiSchema) -} \ No newline at end of file +}