pulumi / pulumi-google-native

Apache License 2.0
70 stars 18 forks source link

Deploying Eventarc Trigger. panic: interface conversion: interface {} is bool, not string #888

Closed voxelbee closed 1 year ago

voxelbee commented 1 year ago

What happened?

When deploying the following eventarc trigger. Pulumi crashes with panic: interface conversion: interface {} is bool, not string.

The validate_only value is expected to be a bool in python but it seems like Pulumi fails to convert it correctly internally. It will deploy correctly if set to a string "false" but then this causes an error when destroying: googleapi: Error 400: Invalid value at 'validate_only' (TYPE_BOOL), ""

gcn.eventarc.v1.Trigger(
            f"{name}-eventarc-trigger",
            trigger_id=f"{name}-updated",
            event_data_content_type="application/protobuf",
            validate_only=False,
            location=config.require("firestore-region"),
            event_filters=[
                gcn.eventarc.v1.EventFilterArgs(
                    attribute="type",
                    value="google.cloud.firestore.document.v1.updated",
                ),
                gcn.eventarc.v1.EventFilterArgs(
                    attribute="database",
                    value="(default)",
                ),
                gcn.eventarc.v1.EventFilterArgs(
                    attribute="namespace",
                    value="(default)",
                ),
            ],
            destination=gcn.eventarc.v1.DestinationArgs(
                cloud_run=gcn.eventarc.v1.CloudRunArgs(
                    service=service.name,
                    region=service.location,
                    path="/updated",
                )
            ),
            service_account=service_account.email,
            opts=pulumi.ResourceOptions(parent=self),
        )

Here is the full error:

        panic: interface conversion: interface {} is bool, not string
    goroutine 103 [running]:
    github.com/pulumi/pulumi/sdk/v3/go/common/resource.PropertyValue.StringValue(...)
        /home/runner/go/pkg/mod/github.com/pulumi/pulumi/sdk/v3@v3.60.0/go/common/resource/properties.go:423
    github.com/pulumi/pulumi-google-native/provider/pkg/provider.buildURL({{0x0, 0x0}, {0x1400280ae10, 0x8b}, {0x14002815960, 0x4, 0x4}}, 0x102e3b668?, 0x1039a6c8a?)
        /home/runner/work/pulumi-google-native/pulumi-google-native/provider/pkg/provider/ids.go:92 +0x64c
    github.com/pulumi/pulumi-google-native/provider/pkg/provider.buildCreateURL(...)
        /home/runner/work/pulumi-google-native/pulumi-google-native/provider/pkg/provider/ids.go:68
    github.com/pulumi/pulumi-google-native/provider/pkg/provider.(*googleCloudProvider).Create(0x14000450480, {0x10349b700?, 0x40?}, 0x14003088dc0)
        /home/runner/work/pulumi-google-native/pulumi-google-native/provider/pkg/provider/provider.go:583 +0x3b4
    github.com/pulumi/pulumi/sdk/v3/proto/go._ResourceProvider_Create_Handler.func1({0x103bcf068, 0x140031581e0}, {0x103b2b120?, 0x14003088dc0})
        /home/runner/go/pkg/mod/github.com/pulumi/pulumi/sdk/v3@v3.60.0/proto/go/provider_grpc.pb.go:573 +0x74
    github.com/grpc-ecosystem/grpc-opentracing/go/otgrpc.OpenTracingServerInterceptor.func1({0x103bcf068, 0x140030f9cb0}, {0x103b2b120, 0x14003088dc0}, 0x140002d91a0, 0x1400308f188)
        /home/runner/go/pkg/mod/github.com/grpc-ecosystem/grpc-opentracing@v0.0.0-20180507213350-8e809c8a8645/go/otgrpc/server.go:57 +0x30c
    github.com/pulumi/pulumi/sdk/v3/proto/go._ResourceProvider_Create_Handler({0x103b94560?, 0x14000450480}, {0x103bcf068, 0x140030f9cb0}, 0x1400064e930, 0x1400024d780)
        /home/runner/go/pkg/mod/github.com/pulumi/pulumi/sdk/v3@v3.60.0/proto/go/provider_grpc.pb.go:575 +0x138
    google.golang.org/grpc.(*Server).processUnaryRPC(0x14000122000, {0x103bd5360, 0x14000502d00}, 0x14003091320, 0x14002e50b40, 0x1046337a0, 0x0)
        /home/runner/go/pkg/mod/google.golang.org/grpc@v1.53.0/server.go:1336 +0xb7c
    google.golang.org/grpc.(*Server).handleStream(0x14000122000, {0x103bd5360, 0x14000502d00}, 0x14003091320, 0x0)
        /home/runner/go/pkg/mod/google.golang.org/grpc@v1.53.0/server.go:1704 +0x82c
    google.golang.org/grpc.(*Server).serveStreams.func1.2()
        /home/runner/go/pkg/mod/google.golang.org/grpc@v1.53.0/server.go:965 +0x84
    created by google.golang.org/grpc.(*Server).serveStreams.func1
        /home/runner/go/pkg/mod/google.golang.org/grpc@v1.53.0/server.go:963 +0x290

    error: update failed

Expected Behavior

We should be able to deploy the Trigger setting validate_only to a bool.

Steps to reproduce

Deploy the above Trigger and set validate_only to a bool.

Output of pulumi about

CLI
Version 3.67.0 Go Version go1.20.4 Go Compiler gc

Plugins NAME VERSION docker 4.2.0 gcp 6.55.1 google-native 0.30.0 python unknown

Host
OS darwin Version 13.3 Arch arm64

This project is written in python: executable='/Users/peytonhammersley/src/ponderosa/infra/venv/bin/python3' version='3.11.3 '

Current Stack: ponderosa/ponderosa/dev

TYPE URN pulumi:pulumi:Stack urn:pulumi:dev::ponderosa::pulumi:pulumi:Stack::ponderosa-dev pulumi:providers:gcp urn:pulumi:dev::ponderosa::pulumi:providers:gcp::default_6_55_1 gcp:projects/service:Service urn:pulumi:dev::ponderosa::gcp:projects/service:Service::enable-artifactregistry.googleapis.com gcp:projects/service:Service urn:pulumi:dev::ponderosa::gcp:projects/service:Service::enable-run.googleapis.com gcp:projects/service:Service urn:pulumi:dev::ponderosa::gcp:projects/service:Service::enable-eventarc.googleapis.com gcp:projects/service:Service urn:pulumi:dev::ponderosa::gcp:projects/service:Service::enable-iam.googleapis.com gcp:secretmanager/secret:Secret urn:pulumi:dev::ponderosa::gcp:secretmanager/secret:Secret::openai-api-key-secret gcp:projects/service:Service urn:pulumi:dev::ponderosa::gcp:projects/service:Service::enable-firestore.googleapis.com gcp:secretmanager/secret:Secret urn:pulumi:dev::ponderosa::gcp:secretmanager/secret:Secret::pinecone-api-key-secret infra:services:TranscribeAudioService urn:pulumi:dev::ponderosa::infra:services:TranscribeAudioService::transcribe-audio-service gcp:artifactregistry/repository:Repository urn:pulumi:dev::ponderosa::gcp:artifactregistry/repository:Repository::services-repo infra:services:PineconeSyncService urn:pulumi:dev::ponderosa::infra:services:PineconeSyncService::pinecone-sync-service gcp:secretmanager/secretVersion:SecretVersion urn:pulumi:dev::ponderosa::gcp:secretmanager/secretVersion:SecretVersion::openai-api-key-secret-version gcp:secretmanager/secretVersion:SecretVersion urn:pulumi:dev::ponderosa::gcp:secretmanager/secretVersion:SecretVersion::pinecone-api-key-secret-version gcp:storage/bucket:Bucket urn:pulumi:dev::ponderosa::infra:services:TranscribeAudioService$gcp:storage/bucket:Bucket::transcribe-audio-service-input-bucket gcp:serviceAccount/account:Account urn:pulumi:dev::ponderosa::infra:services:TranscribeAudioService$gcp:serviceAccount/account:Account::transcribe-audio-service-service-account gcp:serviceAccount/account:Account urn:pulumi:dev::ponderosa::infra:services:PineconeSyncService$gcp:serviceAccount/account:Account::pinecone-sync-service-service-account pulumi:providers:docker urn:pulumi:dev::ponderosa::pulumi:providers:docker::default_4_2_0 docker:index/image:Image urn:pulumi:dev::ponderosa::infra:services:PineconeSyncService$docker:index/image:Image::pinecone-sync-service-image docker:index/image:Image urn:pulumi:dev::ponderosa::infra:services:TranscribeAudioService$docker:index/image:Image::transcribe-audio-service-image gcp:firebaserules/ruleset:Ruleset urn:pulumi:dev::ponderosa::infra:services:TranscribeAudioService$gcp:firebaserules/ruleset:Ruleset::transcribe-audio-service-input-bucket-rules gcp:projects/iAMMember:IAMMember urn:pulumi:dev::ponderosa::infra:services:TranscribeAudioService$gcp:projects/iAMMember:IAMMember::transcribe-audio-service-iam-service-invoker gcp:projects/iAMMember:IAMMember urn:pulumi:dev::ponderosa::infra:services:TranscribeAudioService$gcp:projects/iAMMember:IAMMember::transcribe-audio-service-iam-firestore-reader-writer gcp:projects/iAMMember:IAMMember urn:pulumi:dev::ponderosa::infra:services:PineconeSyncService$gcp:projects/iAMMember:IAMMember::pinecone-sync-service-iam-firestore-reader-writer gcp:storage/bucketIAMMember:BucketIAMMember urn:pulumi:dev::ponderosa::infra:services:TranscribeAudioService$gcp:storage/bucketIAMMember:BucketIAMMember::transcribe-audio-service-iam-input-bucket-reader gcp:projects/iAMMember:IAMMember urn:pulumi:dev::ponderosa::infra:services:TranscribeAudioService$gcp:projects/iAMMember:IAMMember::transcribe-audio-service-iam-eventarc-receiver gcp:secretmanager/secretIamMember:SecretIamMember urn:pulumi:dev::ponderosa::infra:services:TranscribeAudioService$gcp:secretmanager/secretIamMember:SecretIamMember::transcribe-audio-service-iam-openai-api-key-reader gcp:projects/iAMMember:IAMMember urn:pulumi:dev::ponderosa::infra:services:PineconeSyncService$gcp:projects/iAMMember:IAMMember::pinecone-sync-service-iam-eventarc-receiver gcp:secretmanager/secretIamMember:SecretIamMember urn:pulumi:dev::ponderosa::infra:services:PineconeSyncService$gcp:secretmanager/secretIamMember:SecretIamMember::pinecone-sync-service-iam-openai-api-key-reader gcp:projects/iAMMember:IAMMember urn:pulumi:dev::ponderosa::infra:services:PineconeSyncService$gcp:projects/iAMMember:IAMMember::pinecone-sync-service-iam-service-invoker gcp:secretmanager/secretIamMember:SecretIamMember urn:pulumi:dev::ponderosa::infra:services:PineconeSyncService$gcp:secretmanager/secretIamMember:SecretIamMember::pinecone-sync-service-iam-pinecone-api-key-reader gcp:cloudrun/service:Service urn:pulumi:dev::ponderosa::infra:services:TranscribeAudioService$gcp:cloudrun/service:Service::transcribe-audio-service-service gcp:cloudrun/service:Service urn:pulumi:dev::ponderosa::infra:services:PineconeSyncService$gcp:cloudrun/service:Service::pinecone-sync-service-service gcp:eventarc/trigger:Trigger urn:pulumi:dev::ponderosa::infra:services:TranscribeAudioService$gcp:eventarc/trigger:Trigger::transcribe-audio-service-eventarc-trigger pulumi:providers:google-native urn:pulumi:dev::ponderosa::pulumi:providers:google-native::default_0_30_0 google-native:eventarc/v1:Trigger urn:pulumi:dev::ponderosa::infra:services:PineconeSyncService$google-native:eventarc/v1:Trigger::pinecone-sync-service-eventarc-trigger

Found no pending operations associated with dev

Backend
Name pulumi.com URL https://app.pulumi.com/voxelbee User voxelbee Organizations voxelbee, EpicGames, ponderosa

Dependencies: NAME VERSION pip 23.1.2 pulumi-docker 4.2.0 pulumi-gcp 6.55.1 pulumi-google-native 0.30.0 setuptools 67.7.2 wheel 0.40.0

Pulumi locates its logs in /var/folders/s3/d09v32t578q99gt_tfkrb55c0000gn/T/ by default

Additional context

No response

Contributing

Vote on this issue by adding a 👍 reaction. To contribute a fix for this issue, leave a comment (and link to your pull request, if you've opened one already).

danielrbradley commented 1 year ago

Thanks for reporting this @voxelbee 🙇

The source line appears to be here:

https://github.com/pulumi/pulumi-google-native/blob/894acfca45bd5b5e1c46b3fb816d3293d1cd6e9b/provider/pkg/provider/ids.go#L92

It looks like the code is assuming that variables that are used as a part of the URL are going to strings and therefore the string accessor fails when it encounters the bool type.

mikhailshilkov commented 1 year ago

I'm pretty sure the issue has been fixed in 0.31.0 with https://github.com/pulumi/pulumi-google-native/pull/866 if you don't want to wait for the next release with this fix