But by your own admission:
> You are not declaring what it looks like, you are writing instructions for how to produce declarative
If this was true, a Pulumi program would look like this:
const bucket = new aws.s3.Bucket()
if (bucket) {
// do something
} else {
// do something else
}
If you'd written anything in Pulumi you'd know that isn't how it works. The only imperative part of Pulumi is your ability to manipulate the DAG, for example: const config = pulumi.Config()
const createBucket = config.reqiureBool("createBucket")
if (createBucket) {
new aws.s3.Bucket()
}
Now, is there an imperative statement in there? Yes, but the only imperative part is your decision to include or exclude the bucket itself from the declarative end state. You do _exactly_ the same thing in Terraform but with a less intuitive syntax: resource "aws_s3_bucket" "example" {
count = 0
}
By that definition, if Pulumi is imperative, so is Terraform. It's not though, and you're wrong.