pulumi / pulumi-kubernetes

A Pulumi resource provider for Kubernetes to manage API resources and workloads in running clusters
https://www.pulumi.com/docs/reference/clouds/kubernetes/
Apache License 2.0
406 stars 116 forks source link

Cannot install CRD via kustomize in Java #3109

Closed blackat closed 2 months ago

blackat commented 3 months ago

What happened?

Hello, I am installing the Gateway API via kustomize in Java.

var kustomizeResources = new Directory("kustomizeResources",
          DirectoryArgs.builder()
              .directory(
                  "https://github.com/nginxinc/nginx-gateway-fabric/config/crd/gateway-api/standard?ref=v1.3.0")
              .namespace(MY_NAMESPACE)
              .build(),
          ComponentResourceOptions
              .builder()
              .provider(k8sProvider)
              .build()
      );

In TypeScript everything is fine, but in java, the following code return an exception:

Jul 16, 2024 11:29:28 PM com.pulumi.deployment.internal.DeploymentImpl$DefaultEngineLogger errorAsync
    SEVERE: Running program [PID: 9738](/Users/user/.sdkman/candidates/java/current/bin/java -classpath /Users/user/.sdkman/candidates/maven/current/boot/plexus-classworlds-2.6.0.jar -Dclassworlds.conf=/Users/user/.sdkman/candidates/maven/current/bin/m2.conf -Dmaven.home=/Users/user/.sdkman/candidates/maven/current -Dlibrary.jansi.path=/Users/user/.sdkman/candidates/maven/current/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/Users/user/Development/GitHub/inwo-pulumi/application-java org.codehaus.plexus.classworlds.launcher.Launcher -Dorg.slf4j.simpleLogger.defaultLogLevel=warn --no-transfer-progress compile exec:java) failed with an unhandled exception:
    java.lang.IllegalArgumentException: Couldn't instantiate class 'com.pulumi.kubernetes.apiextensions.v1.CustomResourceDefinition' using constructor: 'public com.pulumi.kubernetes.apiextensions.v1.CustomResourceDefinition(java.lang.String,com.pulumi.kubernetes.apiextensions.v1.CustomResourceDefinitionArgs,com.pulumi.resources.CustomResourceOptions)', for resource type: 'kubernetes:apiextensions.k8s.io/v1:CustomResourceDefinition'
        at com.pulumi.serialization.internal.ResourcePackages.tryConstruct(ResourcePackages.java:234)
        at com.pulumi.serialization.internal.Deserializer.tryDeserializeResource(Deserializer.java:367)
        at com.pulumi.serialization.internal.Deserializer.deserializeCore(Deserializer.java:103)
        at com.pulumi.serialization.internal.Deserializer.deserialize(Deserializer.java:59)
        at com.pulumi.serialization.internal.Deserializer.lambda$deserializeList$8(Deserializer.java:150)
        at com.pulumi.serialization.internal.Deserializer.lambda$deserializeOneOf$10(Deserializer.java:223)
        at com.pulumi.serialization.internal.Deserializer.deserializeCore(Deserializer.java:109)
        at com.pulumi.serialization.internal.Deserializer.deserializeOneOf(Deserializer.java:221)
        at com.pulumi.serialization.internal.Deserializer.deserializeList(Deserializer.java:143)
        at com.pulumi.serialization.internal.Deserializer.lambda$deserialize$6(Deserializer.java:75)
        at com.pulumi.serialization.internal.Deserializer.deserializeCore(Deserializer.java:109)
        at com.pulumi.serialization.internal.Deserializer.deserialize(Deserializer.java:59)
        at com.pulumi.serialization.internal.Converter.convertValue(Converter.java:81)
        at com.pulumi.core.internal.OutputCompletionSource.setValue(OutputCompletionSource.java:95)
        at com.pulumi.deployment.internal.DeploymentImpl$ReadOrRegisterResourceInternal.lambda$completeResourceAsync$0(DeploymentImpl.java:1187)
        at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:646)
        at java.base/java.util.concurrent.CompletableFuture$Completion.exec(CompletableFuture.java:483)
        at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
        at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182)
        at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655)
        at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622)
        at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)

Example

This is the code that does not work

var kustomizeResources = new Directory("kustomizeResources",
          DirectoryArgs.builder()
              .directory(
                  "https://github.com/nginxinc/nginx-gateway-fabric/config/crd/gateway-api/standard?ref=v1.3.0")
              .namespace(MY_NAMESPACE)
              .build(),
          ComponentResourceOptions
              .builder()
              .provider(k8sProvider)
              .build()
      );

Output of pulumi about

CLI          
Version      3.124.0
Go Version   go1.22.5
Go Compiler  gc

Plugins
KIND      NAME          VERSION
resource  azure-native  2.50.0
language  java          unknown
resource  kubernetes    4.15.0

Host     
OS       darwin
Version  14.5
Arch     arm64

This project is written in java: executable='/Users/user/.sdkman/candidates/java/current/bin/java' version='openjdk 17.0.1 2021-10-19 LTS
OpenJDK Runtime Environment Zulu17.30+15-CA (build 17.0.1+12-LTS)
OpenJDK 64-Bit Server VM Zulu17.30+15-CA (build 17.0.1+12-LTS, mixed mode, sharing)' gradle='7.3.3' java='/Users/eugenio/.sdkman/candidates/java/current/bin/java' javac='17.0.1' maven='Apache Maven 3.8.4 (9b656c72d54e5bacbed989b64718c159fe39b537)'

Current Stack: blackat/inwo-application-java/dev

Found no resources associated with dev

Found no pending operations associated with dev

Backend        
Name           pulumi.com
URL            https://app.pulumi.com/blackat
User           blackat
Organizations  blackat
Token type     personal

No dependencies found

Pulumi locates its logs in /var/folders/d8/mkf_9rnj2_b3wt2_h0yqhymr0000gn/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).

YanishR commented 3 months ago

I am experiencing similar when using helm. The helm template works fine confirmed by running helm but resources cannot be instantiated with the same error @blackat is experiencing i.e. Couldn't instantiate class <Type> using constructor Type(String, TypeArgs, CustomResourceOptions). I am removing resource by resource and it's giving me the same error. Could there be an issue with the codegen or the mapping?

EronWright commented 3 months ago

Possible duplicate: https://github.com/pulumi/pulumi-kubernetes/issues/3057

blampe commented 2 months ago

Tracking in #3057.