Skip to content
Docs

    Create VM

    client.Compute.VMs.New(ctx, body) (*Operation, error)
    POST/v1/compute/vms

    Create a VM

    ParametersExpand Collapse
    body VMNewParams
    BootVolume param.Field[VMNewParamsBootVolume]

    Boot volume for the VM.

    Size int64

    Size of the Volume in GB.

    Type of the Volume.

    One of the following:
    const VolumeTypeNvme VolumeType = "nvme"
    const VolumeTypeABS VolumeType = "abs"
    Tags []stringOptional

    Tags to attach to the Volume.

    InstanceType param.Field[string]

    Instance type name.

    Name param.Field[string]

    Name of the VM.

    OSImageName param.Field[string]

    Name of the OS Image to use for the VM.

    ProjectID param.Field[string]

    Project ID to create the VM in.

    PublicIPEnabled param.Field[bool]

    Whether to enable public IP for the VM.

    Region param.Field[RegionName]

    Region the resource is in.

    SSHKey param.Field[SSHKeyRequest]

    Public SSH key configuration for the VM.

    SubnetID param.Field[string]

    ID of the subnet to use for the VM.

    DataVolumes param.Field[[]VMNewParamsDataVolume]Optional

    Data volumes for the VM.

    Name string

    Name of the Volume.

    Size int64

    Size of the Volume in GB.

    Type of the Volume.

    One of the following:
    const VolumeTypeNvme VolumeType = "nvme"
    const VolumeTypeABS VolumeType = "abs"
    Tags []stringOptional

    Tags to attach to the Volume.

    Tags param.Field[[]string]Optional

    Tags to attach to the VM.

    ReturnsExpand Collapse
    type Operation struct{…}

    Operation details.

    ID string

    Unique identifier for the Operation.

    CreatedAt Time

    When the Operation was created.

    formatdate-time

    Structured details about what an operation is changing.

    Map of changed field names to their from/to diffs. Keys depend on the parent operation’s kind+type.

    From OperationFieldDiffFromUnion

    Previous value.

    One of the following:
    string
    float64
    bool
    type OperationFieldDiffFromArray []string
    To OperationFieldDiffToUnion

    New value.

    One of the following:
    string
    float64
    bool
    type OperationFieldDiffToArray []string

    Kind of Operation.

    One of the following:
    const OperationKindVM OperationKind = "vm"
    const OperationKindVolume OperationKind = "volume"
    const OperationKindVPC OperationKind = "vpc"
    const OperationKindFirewallRule OperationKind = "firewall_rule"
    const OperationKindNKSCluster OperationKind = "nks_cluster"
    const OperationKindNKSNodePool OperationKind = "nks_node_pool"
    ProjectID string

    Project ID the Operation belongs to.

    ResourceID string

    ID of the resource that the Operation is acting on.

    Status of the Operation.

    One of the following:
    const OperationStatusPending OperationStatus = "pending"
    const OperationStatusRunning OperationStatus = "running"
    const OperationStatusDone OperationStatus = "done"
    const OperationStatusFailed OperationStatus = "failed"
    const OperationStatusUnknown OperationStatus = "unknown"

    Type of Operation.

    One of the following:
    const OperationTypeCreate OperationType = "create"
    const OperationTypeUpdate OperationType = "update"
    const OperationTypeDelete OperationType = "delete"
    const OperationTypeRestart OperationType = "restart"
    UpdatedAt Time

    When the Operation was updated.

    formatdate-time

    Create VM

    package main
    
    import (
      "context"
      "fmt"
    
      "github.com/nirvana-labs/nirvana-go"
      "github.com/nirvana-labs/nirvana-go/compute"
      "github.com/nirvana-labs/nirvana-go/option"
      "github.com/nirvana-labs/nirvana-go/shared"
    )
    
    func main() {
      client := nirvana.NewClient(
        option.WithAPIKey("My API Key"),
      )
      operation, err := client.Compute.VMs.New(context.TODO(), compute.VMNewParams{
        BootVolume: compute.VMNewParamsBootVolume{
          Size: 100,
          Type: compute.VolumeTypeABS,
        },
        InstanceType: "n1-standard-8",
        Name: "my-vm",
        OSImageName: "ubuntu-noble-2026-05-18",
        ProjectID: "123e4567-e89b-12d3-a456-426614174000",
        PublicIPEnabled: true,
        Region: shared.RegionNameUsSva2,
        SSHKey: compute.SSHKeyRequestParam{
          PublicKey: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDBIASkmwNiLcdlW6927Zjt1Hf7Kw/PpEZ4Zm+wU9wn2",
        },
        SubnetID: "123e4567-e89b-12d3-a456-426614174000",
      })
      if err != nil {
        panic(err.Error())
      }
      fmt.Printf("%+v\n", operation.ID)
    }
    
    {
      "id": "123e4567-e89b-12d3-a456-426614174000",
      "created_at": "2025-01-01T00:00:00Z",
      "details": {
        "changes": {
          "foo": {
            "from": "string",
            "to": "string"
          }
        }
      },
      "kind": "vm",
      "project_id": "123e4567-e89b-12d3-a456-426614174000",
      "resource_id": "123e4567-e89b-12d3-a456-426614174000",
      "status": "pending",
      "type": "create",
      "updated_at": "2025-01-01T00:00:00Z"
    }
    Returns Examples
    {
      "id": "123e4567-e89b-12d3-a456-426614174000",
      "created_at": "2025-01-01T00:00:00Z",
      "details": {
        "changes": {
          "foo": {
            "from": "string",
            "to": "string"
          }
        }
      },
      "kind": "vm",
      "project_id": "123e4567-e89b-12d3-a456-426614174000",
      "resource_id": "123e4567-e89b-12d3-a456-426614174000",
      "status": "pending",
      "type": "create",
      "updated_at": "2025-01-01T00:00:00Z"
    }