Earlier quoted context omitted.
It really depends on the interaction between the user's Pulumi script and the Pulumi engine. If there is more than one back and forth, you become declarative, even if you imperatively generate a "declarative" intermediate representation (not really sure what state file at a point in time could ever be imperative), you then would get back some data from the engine, then make choices about what to send off to the engin…
In general maybe, but in the specific context above, I think calling that loop declarative is accurate, and laughing at that classification is a poor response rooted in a deep misunderstanding.
import pulumi
from pulumi_gcp import storage
bucket = "hof-io--develop-internal"
name = "pulumi/hack/condition.txt"
cond = False
msg = "running"
cnt = 0
while not cond:
cnt += 1
key = storage.get_bucket_object_content(name=name, bucket=bucket)
print(cnt, key.content)
if key.content == "exit":
msg = "hallo!"
break
pulumi.export('msg', msg)
pulumi.export('cnt', cnt)
--- 769 exit
770 exit
771 exit
772 exit
773 exit
774 exit
775 exit
Outputs:
cnt: 775
msg: "hallo!"
Resources:
+ 1 to create
info: There are no resources in your stack (other than the stack resource).
Do you want to perform this update? [Use arrows to move, type to filter]
yes
> no
details
----Of note, all but the last exit had a newline, until I `echo -n` the file I copied up
---
ooo...
348 what?!?!
349 what?!?!
350 what?!?!
351 what?!?!
352 what?!?!
353 what?!?!
354 what?!?!
355 what?!?!
356 what?!?!
357 what?!?!
358 what?!?!
359 exit
Outputs:
cnt: 359
msg: "hallo!"
Resources:
+ 1 created
Duration: 27s
---I uploaded a different file while waiting to be asked to continue, and then proceeded to get different outputs
Note, while I can get the contents of a bucket in TF, I cannot build a loop around it as I have above
https://registry.terraform.io/providers/hashicorp/aws/latest...
TF might be susceptible to the same file contents manipulation between plan & apply as well, but then again, you can save a plan to a file and then run it later, so maybe not? Another experiment seems to be in order