Advanced Create InstanceΒΆ

import os
from verda import VerdaClient
from verda.exceptions import APIException

"""
In this hypothetical example, we check if we have enough balance
to deploy an 8V100.48V instance for a week.
If there's not enough balance, we deploy a 4V100.20V instance.

This example uses the balance service to check the current balance,
the instance_types service to check instance type details (price per hour)

We also perform other basic tasks such as creating the client and adding a new SSH key.
"""

# The instance types we want to deploy
INSTANCE_TYPE_8V = '8V100.48V'
INSTANCE_TYPE_4V = '4V100.20V'

# Arbitrary duration for the example
DURATION = 24 * 7  # one week

# Get client secret from environment variable
CLIENT_SECRET = os.environ['VERDA_CLIENT_SECRET']
CLIENT_ID = 'Ibk5bdxV64lKAWOqYnvSi'  # Replace with your client ID

try:
    # Create client
    verda = VerdaClient(CLIENT_ID, CLIENT_SECRET)

    # Create new SSH key
    public_key = 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI0qq2Qjt5GPi7DKdcnBHOkvk8xNsG9dA607tnWagOkHC test_key'
    ssh_key = verda.ssh_keys.create('my test key', public_key)

    # Get all SSH keys
    ssh_keys = verda.ssh_keys.get()
    ssh_keys_ids = list(map(lambda ssh_key: ssh_key.id, ssh_keys))

    # Get our current balance
    balance = verda.balance.get()
    print(balance.amount)

    # Get instance types
    instance_types = verda.instance_types.get()

    # Deploy 8V instance if enough balance for a week, otherwise deploy a 4V
    for instance_details in instance_types:
        if instance_details.instance_type == INSTANCE_TYPE_8V:
            price_per_hour = instance_details.price_per_hour

            if price_per_hour * DURATION < balance.amount:
                # Deploy a new 8V instance
                instance = verda.instances.create(instance_type=INSTANCE_TYPE_8V,
                                                  image='ubuntu-24.04-cuda-12.8-open-docker',
                                                  ssh_key_ids=ssh_keys_ids,
                                                  hostname='example',
                                                  description='large instance'
                                                  os_volume={
                                                      "name": "Large OS volume",
                                                      "size": 95,
                                                  })
            else:
                # Deploy a new 4V instance
                instance = verda.instances.create(instance_type=INSTANCE_TYPE_4V,
                                                  image='ubuntu-24.04-cuda-12.8-open-docker',
                                                  ssh_key_ids=ssh_keys_ids,
                                                  hostname='example',
                                                  description='medium instance')
except APIException as exception:
    print(exception)