Here’s a recent example I came across — data is set as a JSON string in an annotation, and the user wanted to use a nested value from that annotation in a later function call. Normally, this type of thing would involve some glue code in a scripting language, but it’s fairly easy to implement as a callback in Pulumi. As someone who had to do a bunch of that prior to Pulumi, I think it’s a great improvement to keep all that logic in the same place. (disclaimer: I work on Kubernetes at Pulumi)
And here’s the Pulumi code snippet in TypeScript required to parse it.
// This defines a callback that runs once the Service is provisioned.
const neg_status = svc.metadata.annotations.apply(x => {
const status = x['cloud.google.com/neg-status'];
const obj = JSON.parse(status);
return obj["network_endpoint_groups"]["443"]
});
// Using the computed value from the callback to dynamically retrieve another value.
const neg = gcp.compute.getNetworkEndpointGroup({
name: neg_status,
zone: "us-east1-d"
});
The Pulumi engine uses a desired state model[1]. You can use imperative language features like loops and conditionals, but all of that gets mapped to a declarative resource graph prior to diffs/updates.