import asyncio
from nebius.api.nebius.common.v1 import ResourceMetadata
from nebius.api.nebius.compute.v1 import (
AttachedDiskSpec,
CreateDiskRequest,
CreateInstanceRequest,
DiskServiceClient,
DiskSpec,
ExistingDisk,
InstanceServiceClient,
InstanceSpec,
IPAddress,
NetworkInterfaceSpec,
ResourcesSpec,
SourceImageFamily,
)
from nebius.sdk import SDK
async def create_instance() -> None:
# Initialize the SDK with the service account private key file.
sdk = SDK(
user_agent_prefix="<application_name>/<application_version_or_comment>",
service_account_private_key_file_name="<private_key_file_path>",
service_account_public_key_id="<public_key_ID>",
service_account_id="<service_account_ID>",
)
async with sdk:
disk_service = DiskServiceClient(sdk)
instance_service = InstanceServiceClient(sdk)
# Create the boot disk.
disk_operation = await disk_service.create(
CreateDiskRequest(
metadata=ResourceMetadata(
parent_id="<project_ID>",
name="my-boot-disk",
),
spec=DiskSpec(
size_gibibytes=93,
type=DiskSpec.DiskType.NETWORK_SSD,
source_image_family=SourceImageFamily(
image_family="<image_family_name>",
),
),
)
)
await disk_operation.wait()
# Create the VM that uses the boot disk.
instance_operation = await instance_service.create(
CreateInstanceRequest(
metadata=ResourceMetadata(
parent_id="<project_ID>",
name="my-vm",
),
spec=InstanceSpec(
resources=ResourcesSpec(
platform="<platform_name>",
preset="<preset_name>",
),
network_interfaces=[
NetworkInterfaceSpec(
name="eth0",
subnet_id="<subnet_ID>",
ip_address=IPAddress(),
),
],
boot_disk=AttachedDiskSpec(
attach_mode=AttachedDiskSpec.AttachMode.READ_WRITE,
existing_disk=ExistingDisk(
id=disk_operation.resource_id,
),
device_id="boot-disk",
),
),
)
)
await instance_operation.wait()
if __name__ == "__main__":
asyncio.run(create_instance())