New to Kestra?
Use blueprints to kickstart your first workflows.
Install nginx on an existing VM and register the installation as a typed VM.Ingress asset in Kestra, recording version and host metadata for fleet audits.
"What version of nginx is running on that box?" is a question that usually ends in an SSH session. This blueprint installs software on an existing virtual machine and registers the installation as a typed io.kestra.plugin.ee.assets.VM.Ingress asset in the Kestra asset catalog, recording the version and the host it landed on. The VM is declared as an input asset, so the catalog builds a lineage edge from machine to installed component, and fleet-wide questions become metadata queries instead of shell archaeology.
target_vm input names an existing VM (default windows-web-01).choco_install_nginx task simulates choco install nginx -y with io.kestra.plugin.core.log.Log. In production you replace it with a remote execution task, for example an SSH command via io.kestra.plugin.fs.ssh.Command or a PowerShell script via io.kestra.plugin.scripts.powershell.Script.assets.inputs entry using its slugified id, creating the dependency edge and requiring the machine to exist in the catalog.assets.outputs entry of type io.kestra.plugin.ee.assets.VM.Ingress, keyed nginx-{{ execution.id }}, with metadata for version, installed_on, and component type.assets(metadata={"type": "nginx"}) lists every nginx install across the fleet.Package managers install software but keep no central inventory; CMDB tools hold inventories that drift because updates happen out of band. Kestra Assets close the loop: the same task that performs the installation registers the result in the catalog, so inventory can never lag behind reality. Declarative YAML, execution history, retries, and the assets() query function make audits and impact analysis first-class operations.
asset-create-vm blueprint, matching the slugified target_vm value.asset-create-vm so the target VM exists in the catalog.target_vm.VM.Ingress asset with its version metadata and lineage.assets(type='io.kestra.plugin.ee.assets.VM.Ingress') from another flow to list installations.Log stub with io.kestra.plugin.fs.ssh.Command or io.kestra.plugin.scripts.powershell.Script to run the real package manager.