VirtusLab / besom

Besom - a Pulumi SDK for Scala. Also, incidentally, a broom made of twigs tied round a stick. Brooms and besoms are used for protection, to ward off evil spirits, and cleansing of ritual spaces.
https://virtuslab.github.io/besom/
Apache License 2.0
113 stars 7 forks source link

State for resource not found #488

Closed polkx closed 1 month ago

polkx commented 1 month ago

When I try to add the created earlier component via opts(dependsOn = ...) to another resource (in this example, it will be the Namespace resource) the Error shows up about the state for resource not found.

Dependencies:

//> using scala 3.3.1
//> using dep org.virtuslab::besom-core:0.3.1
//> using dep org.virtuslab::besom-kubernetes::4.11.0-core.0.3

Main class:

import besom.*
import besom.api.kubernetes as k8s

@main def main = Pulumi.run {

  val test = Test("test-component")

  val namespace = k8s.core.v1.Namespace(
    "namespace",
    k8s.core.v1.NamespaceArgs(
      metadata = k8s.meta.v1.inputs.ObjectMetaArgs(
        // name = test.flatMap(_.name)
        name = "namespace"
      )
    ),
    opts(dependsOn = test)
  )

  Stack.exports(
    namespaceName = namespace.metadata.name
  )
}

case class Test(name: Output[Option[String]])(using ComponentBase) extends ComponentResource derives RegistersOutputs

object Test:
  def apply(using Context)(name: NonEmptyString): Output[Test] =
    component(name, "custom:resource:Test") {
      val secret = k8s.core.v1.Secret(
        name = "secret-name",
        k8s.core.v1.SecretArgs(
          `type` = "Opaque",
          stringData = Map(
            "password" -> "password"
          )
        )
      )
      Test(
        name = secret.metadata.name
      )
    }

Stack trace:

Diagnostics:
  pulumi:pulumi:Stack (test-dev):
    Compiling project (Scala 3.3.1, JVM (21))
    Compiled project (Scala 3.3.1, JVM (21))
    Exception in thread "main" java.lang.Exception: state for resource Some(Test(urn:pulumi:dev::test::custom:resource:Test::test-component)) not found
        at besom.internal.Resources.getStateFor$$anonfun$4$$anonfun$1(resources.scala:77)
        at besom.internal.Result.flatMap$$anonfun$1(Result.scala:166)
        at besom.internal.Result.runM$$anonfun$7(Result.scala:273)
        at besom.internal.Runtime.flatMapBothM$$anonfun$1$$anonfun$1(Result.scala:118)
        at besom.internal.FutureRuntime.flatMapBoth$$anonfun$1(Result.scala:404)
        at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:477)
        at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1423)
        at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:387)
        at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1312)
        at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1843)
        at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1808)
        at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:188)

    2024.05.06 13:23:18:211 main  ERROR besom.internal.BesomModule.run:70
        java.lang.Exception: state for resource Some(Test(urn:pulumi:dev::test::custom:resource:Test::test-component)) not found
                at besom.internal.Resources.getStateFor$$anonfun$4$$anonfun$1(resources.scala:77)
                at besom.internal.Result.flatMap$$anonfun$1(Result.scala:166)
                at besom.internal.Result.runM$$anonfun$7(Result.scala:273)
                at besom.internal.Runtime.flatMapBothM$$anonfun$1$$anonfun$1(Result.scala:118)
                at besom.internal.FutureRuntime.flatMapBoth$$anonfun$1(Result.scala:404)
                at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:477)
                at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1423)
                at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:387)
                at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1312)
                at java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1843)
                at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1808)
                at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:188)

    error: an unhandled error occurred: '/opt/homebrew/bin/scala-cli /opt/homebrew/bin/scala-cli run .' exited with non-zero exit code: 1

I will also add that it will work if I comment opts(dependsOn = test) and uncomment // name = test.flatMap(_.name))

lbialy commented 1 month ago

502 will probably fix this for good

lbialy commented 1 month ago

fixed in #502