New to Kestra?
Use blueprints to kickstart your first workflows.
Keep a multi-cloud VM inventory in the Kestra KV store. Read, merge a new VM record per cloud provider in Python, and write back, from any provisioning flow.
Every provisioning pipeline needs somewhere to record what it built. This blueprint keeps a lightweight, multi-cloud VM inventory directly in the Kestra KV store: a single vmInventory JSON document with one section per provider (gcp, aws, azure, vcf), each mapping hostnames to arbitrary property objects. Call it as a subflow at the end of any provisioning workflow, passing the hostname, the provider, and whatever metadata you want to keep, and the record is merged in without disturbing the rest of the inventory.
getVMInventory task (io.kestra.plugin.core.kv.Get with errorOnMissing: false) loads the current vmInventory document, tolerating a first run where it does not exist yet.prepareInventory task (io.kestra.plugin.scripts.python.Script) starts from the stored value or an empty per-cloud skeleton via the Pebble coalesce {{ outputs.getVMInventory.value ?? {...} }}, indexes into the section for {{ inputs.cloudProvider | lower }}, upserts the hostname entry with the vmProps JSON, and emits the merged document with Kestra.outputs.updateVMInventory task (io.kestra.plugin.core.kv.Set with kvType: JSON) writes the merged inventory back under the same key.io.kestra.plugin.core.flow.Sequential container, making the read-merge-write unit easy to lift into larger flows.vmProps is any JSON object) with per-provider organization.The inventory lives where the automation lives. Any flow can read kv('vmInventory') in an expression to render dashboards, build Ansible inventories, or drive cleanup jobs, and every mutation is an execution with logs showing exactly which flow added which host. When you outgrow it, swap the KV tasks for database or CMDB API calls without touching the calling flows.
io.kestra.plugin.core.flow.Subflow (or run it manually).vmInventory document.hostname, cloudProvider, and vmProps.{{ kv('vmInventory') }}.remove action input that deletes a hostname entry for decommissioning flows.inventory.ini from the KV document for configuration runs.io.kestra.plugin.notifications.slack.SlackIncomingWebhook.