feat: Add Scaleway Instance Template (#449)
Co-authored-by: DevCats <christofer@coder.com> Co-authored-by: Atif Ali <atif@coder.com>
This commit is contained in:
parent
678c3e631e
commit
24dc52fb17
2
.icons/scaleway.svg
Normal file
2
.icons/scaleway.svg
Normal file
@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg fill="#000000" width="800px" height="800px" viewBox="0 0 24 24" role="img" xmlns="http://www.w3.org/2000/svg"><title>Scaleway icon</title><path d="M16.61 11.11v5.72a1.77 1.77 0 0 1-1.54 1.69h-4a1.43 1.43 0 0 1-1.31-1.22 1.09 1.09 0 0 1 0-.18 1.37 1.37 0 0 1 1.37-1.36h1.74a1 1 0 0 0 1-1v-3.62a1.4 1.4 0 0 1 1.18-1.39h.17a1.37 1.37 0 0 1 1.39 1.36zm-6.46 1.74V9.26a1 1 0 0 1 1-1H13a1.37 1.37 0 0 0 1.37-1.37 1 1 0 0 0 0-.17 1.45 1.45 0 0 0-1.41-1.2H9a1.81 1.81 0 0 0-1.58 1.66v5.7a1.37 1.37 0 0 0 1.37 1.37H9a1.4 1.4 0 0 0 1.15-1.4zm12-4.29V20A4.53 4.53 0 0 1 18 24h-7.58a8.57 8.57 0 0 1-8.56-8.57V4.54A4.54 4.54 0 0 1 6.4 0h7.18a8.56 8.56 0 0 1 8.56 8.56zm-2.74 0a5.83 5.83 0 0 0-5.82-5.82H6.4a1.79 1.79 0 0 0-1.8 1.8v10.89a5.83 5.83 0 0 0 5.82 5.8h7.44a1.79 1.79 0 0 0 1.54-1.48z"/></svg>
|
||||
|
After Width: | Height: | Size: 913 B |
BIN
registry/mossylion/.images/avatar.png
Normal file
BIN
registry/mossylion/.images/avatar.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 21 KiB |
15
registry/mossylion/README.md
Normal file
15
registry/mossylion/README.md
Normal file
@ -0,0 +1,15 @@
|
||||
---
|
||||
display_name: "Mossy Lion"
|
||||
bio: "Tinkerer, exploring European cloud providers"
|
||||
avatar: "./.images/avatar.png"
|
||||
github: "mossylion"
|
||||
status: "community"
|
||||
---
|
||||
|
||||
# Mossy Lion
|
||||
|
||||
Exploring European cloud providers. Usually find me outdoors but if not, somewhere deep in Kubernetes and infra
|
||||
|
||||
## Templates
|
||||
|
||||
- **scaleway-instance**: Scaleway workspace instance with persistent home directory
|
||||
156
registry/mossylion/templates/scaleway-instance/README.md
Normal file
156
registry/mossylion/templates/scaleway-instance/README.md
Normal file
@ -0,0 +1,156 @@
|
||||
---
|
||||
display_name: "Scaleway Instance"
|
||||
description: "A workspace spun up on a Scaleway Instance"
|
||||
icon: "../../../../.icons/scaleway.svg"
|
||||
verified: false
|
||||
tags: ["scaleway", "vm", "linux"]
|
||||
---
|
||||
|
||||
# Scaleway Instance Template
|
||||
|
||||
This template provisions Coder workspaces on [Scaleway](https://www.scaleway.com/) cloud instances with full customization options for regions, instance types, operating systems, and storage configurations.
|
||||
|
||||
## Features
|
||||
|
||||
- **Multi-region support**: Choose from France (Paris), Netherlands (Amsterdam), or Poland (Warsaw)
|
||||
- **Flexible instance sizing**: Wide range of instance types from development to high-performance computing
|
||||
- **Multiple OS options**: Debian 12/13, Ubuntu 24.04, and Fedora 41
|
||||
- **Customizable storage**: Adjustable disk size with configurable IOPS
|
||||
- **IPv4 and IPv6 networking**: Dual-stack IP configuration for enhanced connectivity
|
||||
|
||||
## Prerequisites
|
||||
|
||||
### Scaleway Account Setup
|
||||
|
||||
1. Create a [Scaleway account](https://console.scaleway.com/)
|
||||
2. Create a new project or use an existing one
|
||||
3. Generate API credentials:
|
||||
- Go to **IAM** > **API Keys** in the Scaleway Console
|
||||
- Create a new API key
|
||||
- Note down the **Access Key** and **Secret Key**
|
||||
- Copy your **Project ID** from the project settings
|
||||
- Give permissions for **BlockStorageFullAccess**, **ProjectReadOnly**, **InstancesFullAccess** as a starting point
|
||||
|
||||
## Architecture
|
||||
|
||||
This template creates the following resources for each workspace:
|
||||
|
||||
### Persistent Resources
|
||||
|
||||
- **Block Volume**: Mounted as user's home directory (preserves all data, configs, and projects)
|
||||
|
||||
### Ephemeral Resources (destroyed when workspace stops)
|
||||
|
||||
- **Scaleway Instance**: Virtual machine created fresh on each workspace start
|
||||
- **IPv4 Address**: Routed IPv4 address assigned dynamically
|
||||
- **IPv6 Address**: Routed IPv6 address assigned dynamically
|
||||
- **Cloud-init Configuration**: Automated setup of the Coder agent and persistent storage mounting
|
||||
|
||||
## Configuration Options
|
||||
|
||||
### Region Selection
|
||||
|
||||
Choose from three available regions:
|
||||
|
||||
- **France - Paris (fr-par)**: Default, lowest latency for European users
|
||||
- **Netherlands - Amsterdam (nl-ams)**: Alternative European location
|
||||
- **Poland - Warsaw (pl-waw)**: Eastern European option
|
||||
|
||||
### Instance Types
|
||||
|
||||
The template supports a comprehensive range of Scaleway instance types:
|
||||
|
||||
#### Development Instances
|
||||
|
||||
- **STARDUST1-S**: 1 CPU, 1GB RAM - Basic development
|
||||
- **DEV1-S/M/L/XL**: 2-4 CPUs, 2-12GB RAM - Standard development
|
||||
|
||||
#### Production Instances
|
||||
|
||||
- **ENT1 Series**: 2-96 CPUs, 8-384GB RAM - Enterprise workloads
|
||||
- **GP1 Series**: 4-48 CPUs, 16-256GB RAM - General purpose
|
||||
- **PRO2 Series**: 2-32 CPUs, 8-128GB RAM - Professional workloads
|
||||
|
||||
#### Specialized Instances
|
||||
|
||||
- **L4 Series**: GPU-enabled instances for AI/ML workloads
|
||||
- **COPARM1 Series**: ARM64 architecture for specific use cases
|
||||
|
||||
### Operating System Options
|
||||
|
||||
- **Debian 13 (Trixie)**: Latest Debian release
|
||||
- **Debian 12 (Bookworm)**: Stable Debian LTS
|
||||
- **Ubuntu 24.04 (Noble)**: Latest Ubuntu LTS
|
||||
- **Fedora 41**: Cutting-edge features and packages
|
||||
|
||||
### Storage Configuration
|
||||
|
||||
- **Home Directory Size**: 10-500GB adjustable via slider (your entire home directory)
|
||||
- **IOPS**: 5,000 or 15,000 IOPS options for performance tuning
|
||||
|
||||
## Template Components
|
||||
|
||||
### Included Tools
|
||||
|
||||
- **VS Code Server**: Browser-based IDE with full extension support
|
||||
- **System Monitoring**: CPU, RAM, and disk usage metrics
|
||||
- **Dotfiles Support**: Automatic dotfiles synchronization on workspace start
|
||||
- **Custom Environment Variables**: Pre-configured welcome message
|
||||
|
||||
### Cloud-init Setup
|
||||
|
||||
The template uses cloud-init for:
|
||||
|
||||
- Automatic Coder agent installation and configuration
|
||||
- User account setup with proper permissions
|
||||
- Persistent home directory mounting (automatic disk partitioning and filesystem creation)
|
||||
- Development tools initialization
|
||||
|
||||
## Usage
|
||||
|
||||
### Creating a Workspace
|
||||
|
||||
1. **Select Template**: Choose "Scaleway Instance" from your Coder templates
|
||||
2. **Configure Region**: Pick your preferred Scaleway region
|
||||
3. **Choose Instance**: Select instance type based on your performance needs
|
||||
4. **Select OS**: Pick your preferred operating system
|
||||
5. **Set Home Directory Size**: Adjust storage size (10-500GB) for your persistent home directory
|
||||
6. **Create**: Launch your workspace
|
||||
|
||||
### Managing Costs
|
||||
|
||||
- **VM instances are destroyed** when workspace stops (zero compute costs when not in use)
|
||||
- **IP addresses are released** when workspace stops (no static IP charges)
|
||||
- **Home directory persists** on dedicated block volume (small storage cost only)
|
||||
- **Fresh OS** on each workspace start with persistent user data
|
||||
- Choose appropriate instance sizes for your workload requirements
|
||||
|
||||
## Customization
|
||||
|
||||
### Extending the Template
|
||||
|
||||
You can customize this template by:
|
||||
|
||||
1. **Adding Software**: Modify cloud-init scripts to install additional tools
|
||||
2. **Custom Modules**: Include additional Coder modules from the registry
|
||||
3. **Network Configuration**: Adjust security groups or network settings
|
||||
4. **Startup Scripts**: Add custom initialization logic
|
||||
|
||||
## Maintenance
|
||||
|
||||
### Updating Instance Types
|
||||
|
||||
To update the available instance types, regenerate the `scaleway-config.json` file:
|
||||
|
||||
```bash
|
||||
scw instance server-type list -o json | jq 'map({name, cpu, gpu, ram, arch})' > scaleway-config.json.json
|
||||
```
|
||||
|
||||
This pulls the latest instance types from Scaleway and formats them for use in the template.
|
||||
|
||||
## References
|
||||
|
||||
- [Scaleway Documentation](https://www.scaleway.com/en/docs/)
|
||||
- [Scaleway Instance Types](https://www.scaleway.com/en/pricing/#instances)
|
||||
- [Coder Templates Documentation](https://coder.com/docs/templates)
|
||||
- [Terraform Scaleway Provider](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs)
|
||||
@ -0,0 +1,35 @@
|
||||
#cloud-config
|
||||
cloud_final_modules:
|
||||
- [scripts-user, always]
|
||||
hostname: ${hostname}
|
||||
users:
|
||||
- name: ${linux_user}
|
||||
sudo: ALL=(ALL) NOPASSWD:ALL
|
||||
shell: /bin/bash
|
||||
|
||||
# Setup persistent storage disk
|
||||
disk_setup:
|
||||
/dev/sdb:
|
||||
table_type: gpt
|
||||
layout: true
|
||||
overwrite: false
|
||||
|
||||
fs_setup:
|
||||
- label: persistent-home
|
||||
filesystem: ext4
|
||||
device: /dev/sdb1
|
||||
partition: auto
|
||||
|
||||
mounts:
|
||||
- ["/dev/sdb1", "/home/${linux_user}", "ext4", "defaults", "0", "2"]
|
||||
|
||||
# Fix ownership after mounting
|
||||
runcmd:
|
||||
- chown -R ${linux_user}:${linux_user} /home/${linux_user}
|
||||
- chmod 755 /home/${linux_user}
|
||||
|
||||
# Automatically grow the partition
|
||||
growpart:
|
||||
mode: auto
|
||||
devices: ['/']
|
||||
ignore_growroot_disabled: false
|
||||
@ -0,0 +1,2 @@
|
||||
#!/bin/bash
|
||||
sudo -u '${linux_user}' sh -c 'export CODER_AGENT_TOKEN="${coder_agent_token}"; ${init_script}'
|
||||
337
registry/mossylion/templates/scaleway-instance/main.tf
Normal file
337
registry/mossylion/templates/scaleway-instance/main.tf
Normal file
@ -0,0 +1,337 @@
|
||||
|
||||
terraform {
|
||||
required_providers {
|
||||
coder = {
|
||||
source = "coder/coder"
|
||||
version = "~> 2"
|
||||
}
|
||||
scaleway = {
|
||||
source = "scaleway/scaleway"
|
||||
version = "~> 2"
|
||||
}
|
||||
cloudinit = {
|
||||
source = "hashicorp/cloudinit"
|
||||
version = "~> 2"
|
||||
}
|
||||
}
|
||||
required_version = ">= 1.0"
|
||||
}
|
||||
|
||||
provider "scaleway" {
|
||||
access_key = var.access_key
|
||||
secret_key = var.secret_key
|
||||
region = data.coder_parameter.region.value
|
||||
}
|
||||
|
||||
locals {
|
||||
hostname = lower(data.coder_workspace.me.name)
|
||||
linux_user = "coder"
|
||||
}
|
||||
|
||||
data "cloudinit_config" "user_data" {
|
||||
gzip = false
|
||||
base64_encode = false
|
||||
|
||||
boundary = "//"
|
||||
|
||||
part {
|
||||
filename = "cloud-config.yaml"
|
||||
content_type = "text/cloud-config"
|
||||
|
||||
content = templatefile("${path.module}/cloud-init/cloud-config.yaml.tftpl", {
|
||||
hostname = local.hostname
|
||||
linux_user = local.linux_user
|
||||
})
|
||||
}
|
||||
|
||||
part {
|
||||
filename = "userdata.sh"
|
||||
content_type = "text/x-shellscript"
|
||||
|
||||
content = templatefile("${path.module}/cloud-init/userdata.sh.tftpl", {
|
||||
linux_user = local.linux_user
|
||||
init_script = coder_agent.main.init_script
|
||||
coder_agent_token = coder_agent.main.token
|
||||
})
|
||||
}
|
||||
}
|
||||
data "coder_provisioner" "me" {}
|
||||
|
||||
data "coder_workspace" "me" {}
|
||||
|
||||
data "coder_workspace_owner" "me" {}
|
||||
|
||||
resource "coder_agent" "main" {
|
||||
arch = local.selected_arch
|
||||
os = data.coder_provisioner.me.os
|
||||
auth = "token"
|
||||
|
||||
startup_script = <<-EOT
|
||||
set -e
|
||||
|
||||
# Install additional tools or run commands at workspace startup
|
||||
# Uncomment and customize as needed:
|
||||
# sudo apt-get update
|
||||
# sudo apt-get install -y build-essential
|
||||
EOT
|
||||
|
||||
metadata {
|
||||
display_name = "CPU Usage"
|
||||
key = "0_cpu_usage"
|
||||
script = "coder stat cpu"
|
||||
interval = 10
|
||||
timeout = 1
|
||||
}
|
||||
|
||||
metadata {
|
||||
display_name = "RAM Usage"
|
||||
key = "1_ram_usage"
|
||||
script = "coder stat mem"
|
||||
interval = 10
|
||||
timeout = 1
|
||||
}
|
||||
metadata {
|
||||
display_name = "Disk Usage"
|
||||
key = "1_disk_usage"
|
||||
script = "coder stat disk --path /home/${local.linux_user}"
|
||||
interval = 600
|
||||
timeout = 30
|
||||
}
|
||||
}
|
||||
|
||||
module "code-server" {
|
||||
source = "registry.coder.com/modules/code-server/coder"
|
||||
version = "1.3.1"
|
||||
agent_id = coder_agent.main.id
|
||||
order = 1
|
||||
folder = "/home/${local.linux_user}"
|
||||
}
|
||||
|
||||
# Runs a script at workspace start/stop or on a cron schedule
|
||||
# details: https://registry.terraform.io/providers/coder/coder/latest/docs/resources/script
|
||||
|
||||
module "dotfiles" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/dotfiles/coder"
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
|
||||
resource "coder_metadata" "workspace_info" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
resource_id = scaleway_instance_server.workspace[0].id
|
||||
|
||||
item {
|
||||
key = "region"
|
||||
value = data.coder_parameter.region.value
|
||||
}
|
||||
item {
|
||||
key = "instance type"
|
||||
value = scaleway_instance_server.workspace[0].type
|
||||
}
|
||||
item {
|
||||
key = "image"
|
||||
value = data.coder_parameter.base_image.value
|
||||
}
|
||||
}
|
||||
|
||||
resource "coder_metadata" "volume_info" {
|
||||
resource_id = scaleway_block_volume.persistent_storage.id
|
||||
|
||||
item {
|
||||
key = "size"
|
||||
value = "${scaleway_block_volume.persistent_storage.size_in_gb} GiB"
|
||||
}
|
||||
item {
|
||||
key = "iops"
|
||||
value = scaleway_block_volume.persistent_storage.iops
|
||||
}
|
||||
}
|
||||
|
||||
data "coder_parameter" "region" {
|
||||
name = "Scaleway Region"
|
||||
description = "Region to deploy server into"
|
||||
type = "string"
|
||||
default = "fr-par"
|
||||
option {
|
||||
name = "France - Paris (fr-par)"
|
||||
value = "fr-par"
|
||||
icon = "/emojis/1f1eb-1f1f7.png"
|
||||
}
|
||||
option {
|
||||
name = "Netherlands - Amsterdam (nl-ams)"
|
||||
value = "nl-ams"
|
||||
icon = "/emojis/1f1f3-1f1f1.png"
|
||||
}
|
||||
option {
|
||||
name = "Poland - Warsaw (pl-waw)"
|
||||
value = "pl-waw"
|
||||
icon = "/emojis/1f1f5-1f1f1.png"
|
||||
}
|
||||
}
|
||||
|
||||
data "coder_parameter" "base_image" {
|
||||
name = "Image"
|
||||
description = "Which base image would you like to use?"
|
||||
type = "string"
|
||||
form_type = "radio"
|
||||
default = "debian_trixie"
|
||||
|
||||
option {
|
||||
name = "Debian 13 (Trixie)"
|
||||
value = "debian_trixie"
|
||||
icon = "/icon/debian.svg"
|
||||
}
|
||||
|
||||
option {
|
||||
name = "Debian 12 (Bookworm)"
|
||||
value = "debian_bookworm"
|
||||
icon = "/icon/debian.svg"
|
||||
}
|
||||
|
||||
option {
|
||||
name = "Ubuntu 24.04 (Noble)"
|
||||
value = "ubuntu_noble"
|
||||
icon = "/icon/ubuntu.svg"
|
||||
}
|
||||
|
||||
option {
|
||||
name = "Fedora 41"
|
||||
value = "fedora_41"
|
||||
icon = "/icon/fedora.svg"
|
||||
}
|
||||
}
|
||||
|
||||
data "coder_parameter" "root_volume_size" {
|
||||
name = "Root Volume Size"
|
||||
description = "Size of the OS/boot disk in GB"
|
||||
type = "number"
|
||||
form_type = "slider"
|
||||
default = "20"
|
||||
order = 7
|
||||
validation {
|
||||
min = 10
|
||||
max = 1000
|
||||
monotonic = "increasing"
|
||||
}
|
||||
}
|
||||
|
||||
data "coder_parameter" "disk_size" {
|
||||
name = "Persistent Storage Size"
|
||||
description = "Size of the additional persistent storage volume in GB"
|
||||
type = "number"
|
||||
form_type = "slider"
|
||||
default = "10"
|
||||
order = 8
|
||||
validation {
|
||||
min = 10
|
||||
max = 500
|
||||
monotonic = "increasing"
|
||||
}
|
||||
}
|
||||
|
||||
locals {
|
||||
scaleway_config_raw = jsondecode(file("${path.module}/scaleway-config.json"))
|
||||
|
||||
scaleway_instance_options = {
|
||||
for instance in local.scaleway_config_raw :
|
||||
instance.name => {
|
||||
name = "${instance.name} (${instance.cpu} CPU, ${instance.gpu} GPU, ${floor(instance.ram / 1073741824)} GB RAM)"
|
||||
value = instance.name
|
||||
}
|
||||
}
|
||||
|
||||
instance_arch_map = {
|
||||
for instance in local.scaleway_config_raw :
|
||||
instance.name => instance.arch
|
||||
}
|
||||
|
||||
# Convert Scaleway arch format to Coder arch format
|
||||
selected_arch = local.instance_arch_map[data.coder_parameter.instance_size.value] == "x86_64" ? "amd64" : local.instance_arch_map[data.coder_parameter.instance_size.value]
|
||||
}
|
||||
|
||||
data "coder_parameter" "instance_size" {
|
||||
name = "instance_size"
|
||||
display_name = "Instance Size"
|
||||
description = "Which Instance Size should be used?"
|
||||
default = "DEV1-M"
|
||||
type = "string"
|
||||
icon = "/icon/memory.svg"
|
||||
mutable = false
|
||||
form_type = "dropdown"
|
||||
|
||||
dynamic "option" {
|
||||
for_each = local.scaleway_instance_options
|
||||
content {
|
||||
name = option.value.name
|
||||
value = option.value.value
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
data "coder_parameter" "volume_iops" {
|
||||
name = "Volume IOPS"
|
||||
description = "IOPS to provision for disk"
|
||||
type = "number"
|
||||
default = 5000
|
||||
option {
|
||||
name = "5000"
|
||||
value = 5000
|
||||
}
|
||||
option {
|
||||
name = "15000"
|
||||
value = 15000
|
||||
}
|
||||
}
|
||||
|
||||
resource "scaleway_instance_server" "workspace" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
name = "coder-${lower(data.coder_workspace_owner.me.name)}-${lower(data.coder_workspace.me.name)}"
|
||||
type = data.coder_parameter.instance_size.value
|
||||
image = data.coder_parameter.base_image.value
|
||||
ip_ids = [scaleway_instance_ip.server_ip[0].id, scaleway_instance_ip.v4_server_ip[0].id]
|
||||
project_id = var.project_id
|
||||
user_data = {
|
||||
cloud-init = data.cloudinit_config.user_data.rendered
|
||||
}
|
||||
additional_volume_ids = [scaleway_block_volume.persistent_storage.id]
|
||||
|
||||
root_volume {
|
||||
size_in_gb = data.coder_parameter.root_volume_size.value
|
||||
}
|
||||
}
|
||||
|
||||
resource "scaleway_block_volume" "persistent_storage" {
|
||||
iops = data.coder_parameter.volume_iops.value
|
||||
name = "coder-${lower(data.coder_workspace_owner.me.name)}-${lower(data.coder_workspace.me.name)}-home"
|
||||
size_in_gb = data.coder_parameter.disk_size.value
|
||||
project_id = var.project_id
|
||||
}
|
||||
|
||||
|
||||
resource "scaleway_instance_ip" "server_ip" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
type = "routed_ipv6"
|
||||
project_id = var.project_id
|
||||
}
|
||||
|
||||
resource "scaleway_instance_ip" "v4_server_ip" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
type = "routed_ipv4"
|
||||
project_id = var.project_id
|
||||
}
|
||||
|
||||
variable "project_id" {
|
||||
type = string
|
||||
description = "ID of the project to deploy into"
|
||||
}
|
||||
|
||||
variable "access_key" {
|
||||
type = string
|
||||
description = "Access key to use to deploy"
|
||||
}
|
||||
|
||||
variable "secret_key" {
|
||||
type = string
|
||||
description = "Secret key to use to deploy"
|
||||
}
|
||||
@ -0,0 +1,450 @@
|
||||
[
|
||||
{
|
||||
"name": "COPARM1-2C-8G",
|
||||
"cpu": 2,
|
||||
"gpu": 0,
|
||||
"ram": 8589934592,
|
||||
"arch": "arm64"
|
||||
},
|
||||
{
|
||||
"name": "COPARM1-4C-16G",
|
||||
"cpu": 4,
|
||||
"gpu": 0,
|
||||
"ram": 17179869184,
|
||||
"arch": "arm64"
|
||||
},
|
||||
{
|
||||
"name": "COPARM1-8C-32G",
|
||||
"cpu": 8,
|
||||
"gpu": 0,
|
||||
"ram": 34359738368,
|
||||
"arch": "arm64"
|
||||
},
|
||||
{
|
||||
"name": "COPARM1-16C-64G",
|
||||
"cpu": 16,
|
||||
"gpu": 0,
|
||||
"ram": 68719476736,
|
||||
"arch": "arm64"
|
||||
},
|
||||
{
|
||||
"name": "COPARM1-32C-128G",
|
||||
"cpu": 32,
|
||||
"gpu": 0,
|
||||
"ram": 137438953472,
|
||||
"arch": "arm64"
|
||||
},
|
||||
{
|
||||
"name": "DEV1-S",
|
||||
"cpu": 2,
|
||||
"gpu": 0,
|
||||
"ram": 2147483648,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "DEV1-M",
|
||||
"cpu": 3,
|
||||
"gpu": 0,
|
||||
"ram": 4294967296,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "DEV1-L",
|
||||
"cpu": 4,
|
||||
"gpu": 0,
|
||||
"ram": 8589934592,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "DEV1-XL",
|
||||
"cpu": 4,
|
||||
"gpu": 0,
|
||||
"ram": 12884901888,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "ENT1-XXS",
|
||||
"cpu": 2,
|
||||
"gpu": 0,
|
||||
"ram": 8589934592,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "ENT1-XS",
|
||||
"cpu": 4,
|
||||
"gpu": 0,
|
||||
"ram": 17179869184,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "ENT1-S",
|
||||
"cpu": 8,
|
||||
"gpu": 0,
|
||||
"ram": 34359738368,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "ENT1-M",
|
||||
"cpu": 16,
|
||||
"gpu": 0,
|
||||
"ram": 68719476736,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "ENT1-L",
|
||||
"cpu": 32,
|
||||
"gpu": 0,
|
||||
"ram": 137438953472,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "ENT1-XL",
|
||||
"cpu": 64,
|
||||
"gpu": 0,
|
||||
"ram": 274877906944,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "ENT1-2XL",
|
||||
"cpu": 96,
|
||||
"gpu": 0,
|
||||
"ram": 412316860416,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "GP1-XS",
|
||||
"cpu": 4,
|
||||
"gpu": 0,
|
||||
"ram": 17179869184,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "GP1-S",
|
||||
"cpu": 8,
|
||||
"gpu": 0,
|
||||
"ram": 34359738368,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "GP1-M",
|
||||
"cpu": 16,
|
||||
"gpu": 0,
|
||||
"ram": 68719476736,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "GP1-L",
|
||||
"cpu": 32,
|
||||
"gpu": 0,
|
||||
"ram": 137438953472,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "GP1-XL",
|
||||
"cpu": 48,
|
||||
"gpu": 0,
|
||||
"ram": 274877906944,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "L4-1-24G",
|
||||
"cpu": 8,
|
||||
"gpu": 1,
|
||||
"ram": 51539607552,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "L4-2-24G",
|
||||
"cpu": 16,
|
||||
"gpu": 2,
|
||||
"ram": 103079215104,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "L4-4-24G",
|
||||
"cpu": 32,
|
||||
"gpu": 4,
|
||||
"ram": 206158430208,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "L4-8-24G",
|
||||
"cpu": 64,
|
||||
"gpu": 8,
|
||||
"ram": 412316860416,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "PLAY2-PICO",
|
||||
"cpu": 1,
|
||||
"gpu": 0,
|
||||
"ram": 2147483648,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "PLAY2-NANO",
|
||||
"cpu": 2,
|
||||
"gpu": 0,
|
||||
"ram": 4294967296,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "PLAY2-MICRO",
|
||||
"cpu": 4,
|
||||
"gpu": 0,
|
||||
"ram": 8589934592,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "POP2-HC-2C-4G",
|
||||
"cpu": 2,
|
||||
"gpu": 0,
|
||||
"ram": 4294967296,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "POP2-2C-8G",
|
||||
"cpu": 2,
|
||||
"gpu": 0,
|
||||
"ram": 8589934592,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "POP2-HM-2C-16G",
|
||||
"cpu": 2,
|
||||
"gpu": 0,
|
||||
"ram": 17179869184,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "POP2-HC-4C-8G",
|
||||
"cpu": 4,
|
||||
"gpu": 0,
|
||||
"ram": 8589934592,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "POP2-4C-16G",
|
||||
"cpu": 4,
|
||||
"gpu": 0,
|
||||
"ram": 17179869184,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "POP2-2C-8G-WIN",
|
||||
"cpu": 2,
|
||||
"gpu": 0,
|
||||
"ram": 8589934592,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "POP2-HM-4C-32G",
|
||||
"cpu": 4,
|
||||
"gpu": 0,
|
||||
"ram": 34359738368,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "POP2-HC-8C-16G",
|
||||
"cpu": 8,
|
||||
"gpu": 0,
|
||||
"ram": 17179869184,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "POP2-HN-3",
|
||||
"cpu": 2,
|
||||
"gpu": 0,
|
||||
"ram": 4294967296,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "POP2-8C-32G",
|
||||
"cpu": 8,
|
||||
"gpu": 0,
|
||||
"ram": 34359738368,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "POP2-4C-16G-WIN",
|
||||
"cpu": 4,
|
||||
"gpu": 0,
|
||||
"ram": 17179869184,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "POP2-HM-8C-64G",
|
||||
"cpu": 8,
|
||||
"gpu": 0,
|
||||
"ram": 68719476736,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "POP2-HC-16C-32G",
|
||||
"cpu": 16,
|
||||
"gpu": 0,
|
||||
"ram": 34359738368,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "POP2-HN-5",
|
||||
"cpu": 4,
|
||||
"gpu": 0,
|
||||
"ram": 8589934592,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "POP2-16C-64G",
|
||||
"cpu": 16,
|
||||
"gpu": 0,
|
||||
"ram": 68719476736,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "POP2-8C-32G-WIN",
|
||||
"cpu": 8,
|
||||
"gpu": 0,
|
||||
"ram": 34359738368,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "POP2-HN-10",
|
||||
"cpu": 4,
|
||||
"gpu": 0,
|
||||
"ram": 8589934592,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "POP2-HM-16C-128G",
|
||||
"cpu": 16,
|
||||
"gpu": 0,
|
||||
"ram": 137438953472,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "POP2-HC-32C-64G",
|
||||
"cpu": 32,
|
||||
"gpu": 0,
|
||||
"ram": 68719476736,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "POP2-32C-128G",
|
||||
"cpu": 32,
|
||||
"gpu": 0,
|
||||
"ram": 137438953472,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "POP2-HC-48C-96G",
|
||||
"cpu": 48,
|
||||
"gpu": 0,
|
||||
"ram": 103079215104,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "POP2-16C-64G-WIN",
|
||||
"cpu": 16,
|
||||
"gpu": 0,
|
||||
"ram": 68719476736,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "POP2-HM-32C-256G",
|
||||
"cpu": 32,
|
||||
"gpu": 0,
|
||||
"ram": 274877906944,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "POP2-HC-64C-128G",
|
||||
"cpu": 64,
|
||||
"gpu": 0,
|
||||
"ram": 137438953472,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "POP2-48C-192G",
|
||||
"cpu": 48,
|
||||
"gpu": 0,
|
||||
"ram": 206158430208,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "POP2-64C-256G",
|
||||
"cpu": 64,
|
||||
"gpu": 0,
|
||||
"ram": 274877906944,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "POP2-HM-48C-384G",
|
||||
"cpu": 48,
|
||||
"gpu": 0,
|
||||
"ram": 412316860416,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "POP2-32C-128G-WIN",
|
||||
"cpu": 32,
|
||||
"gpu": 0,
|
||||
"ram": 137438953472,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "POP2-HM-64C-512G",
|
||||
"cpu": 64,
|
||||
"gpu": 0,
|
||||
"ram": 549755813888,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "PRO2-XXS",
|
||||
"cpu": 2,
|
||||
"gpu": 0,
|
||||
"ram": 8589934592,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "PRO2-XS",
|
||||
"cpu": 4,
|
||||
"gpu": 0,
|
||||
"ram": 17179869184,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "PRO2-S",
|
||||
"cpu": 8,
|
||||
"gpu": 0,
|
||||
"ram": 34359738368,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "PRO2-M",
|
||||
"cpu": 16,
|
||||
"gpu": 0,
|
||||
"ram": 68719476736,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "PRO2-L",
|
||||
"cpu": 32,
|
||||
"gpu": 0,
|
||||
"ram": 137438953472,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "RENDER-S",
|
||||
"cpu": 10,
|
||||
"gpu": 1,
|
||||
"ram": 45097156608,
|
||||
"arch": "x86_64"
|
||||
},
|
||||
{
|
||||
"name": "STARDUST1-S",
|
||||
"cpu": 1,
|
||||
"gpu": 0,
|
||||
"ram": 1073741824,
|
||||
"arch": "x86_64"
|
||||
}
|
||||
]
|
||||
Loading…
x
Reference in New Issue
Block a user