New to Kestra?
Use blueprints to kickstart your first workflows.
Reserve a static external IP for an existing VM and register it as a typed VM.IP asset in Kestra, with attachment metadata and lineage back to the machine.
IP addresses are among the most commonly lost pieces of infrastructure state: reserved in a console, attached to a machine, then forgotten until an outage or an audit. This blueprint reserves a static external IP for an existing virtual machine and registers it as a typed io.kestra.plugin.ee.assets.VM.IP asset in the Kestra asset catalog. The VM is declared as an input asset, so the catalog records both the IP itself and its attachment to the machine, and downstream flows such as certificate provisioning can look the IP up by querying asset metadata.
target_vm input names an existing VM (default windows-web-01) and target_ip carries the address to reserve.reserve_ip task simulates the reservation with io.kestra.plugin.core.log.Log. In production you swap in a real task, for example io.kestra.plugin.gcp.cli.GCloudCLI running gcloud compute addresses create.assets.inputs entry using its slugified id, which requires the machine to already exist in the catalog and creates the dependency edge.assets.outputs entry of type io.kestra.plugin.ee.assets.VM.IP, keyed by the address plus the execution id, with metadata recording type: static and attached_to, the VM it belongs to.VM.IP asset per reserved address, with attachment metadata.attached_to) that companion flows like asset-assign-certificate query with assets() and jq to find the right IP for a VM.Cloud providers reserve addresses but keep the attachment knowledge inside their own consoles, invisible to your workflows. Kestra Assets make the IP a typed catalog entry with metadata that any flow can query at execution time through the assets() function. With declarative YAML, execution history, and lineage on top, IP management becomes auditable instead of anecdotal.
asset-create-vm blueprint, matching the slugified target_vm value.asset-create-vm (or register a VM asset another way) so the input asset exists.target_vm value.VM.IP asset and its lineage edge from the VM.asset-assign-certificate next; its dynamic input will discover this IP via metadata.Log stub with io.kestra.plugin.gcp.cli.GCloudCLI or io.kestra.plugin.aws.cli.AwsCLI to reserve a real address.