### TOML Configuration Example for Oxide Rack Source: https://docs.oxide.computer/guides/system/initial-rack-setup Example content of the `rack.toml` file, illustrating the structure and common configuration parameters for an Oxide Rack. This includes DNS settings, IP pools, NTP servers, and network configurations. ```toml # Delegated external DNS zone name # # The rack provides separate external API and console endpoints for each Silo. # These are named `$silo_name.sys.$external_dns_zone_name`. For a Silo called # "eng" with delegated domain "oxide.example", the API would be accessible at # "eng.sys.oxide.example". The rack runs external DNS servers that serve A/AAAA # records for these DNS names. external_dns_zone_name = "" # IP addresses for authoritative external DNS servers operated by the rack for # the DNS domain delegated to the rack by the customer. Each of these addresses # must be contained in one of the "internal services" IP Pool ranges listed # below. external_dns_ips = [ ] # External NTP servers; e.g., "ntp.eng.oxide.computer". ntp_servers = [ ] # External DNS server IP Addresses; e.g., "1.1.1.1", "9.9.9.9". dns_servers = [ ] # Ranges of the service IP pool which may be used for internal services. # # Elements of this list should be of the form: # # { first = "first_ip", last = "last_ip" } # # where `last_ip` is equal to or higher than `first_ip`; e.g., # # { first = "172.20.26.1", last = "172.20.26.10" } internal_services_ip_pool_ranges = [ ] # List of sleds to initialize. # # Confirm this list contains all expected sleds before continuing! bootstrap_sleds = [ (list of sleds auto-discovered from the rack will be displayed here) ] # Allowlist of source IPs that can make requests to user-facing services. # # Use the key: # # allow = "any" # # to indicate any external IPs are allowed to make requests. This is the default. # # Use the below two lines to only allow requests from the specified IP subnets. # Requests from any other source IPs are refused. Note that individual addresses # must include the netmask, e.g., "1.2.3.4/32". # # allow = "list" # ips = [ "1.2.3.4/5", "5.6.7.8/10" ] [allowed_source_ips] allow = "any" # network config [rack_network_config] infra_ip_first = "" infra_ip_last = "" # A table of ports to initialize on the rack. The keys are the switch (switch0, switch1) # and the port name (qsfp0, qsfp1, etc). ``` -------------------------------- ### Wicket Setup Command Usage Source: https://docs.oxide.computer/guides/system/initial-rack-setup Displays the help message for the 'wicket setup' command, listing available subcommands for rack configuration management. This includes options for getting, setting, and resetting configurations, as well as managing passwords, certificates, and keys. ```Shell Usage: wicket setup [OPTIONS] Commands: get-config Get the current rack configuration as a TOML template set-config Set the current rack configuration from a filled-in TOML template reset-config Reset the configuration to its original (empty) state set-password Set the password for the recovery user of the recovery silo set-bgp-auth-key Set one or more BGP authentication keys upload-cert Upload a certificate chain upload-key Upload the private key of a certificate chain help Print this message or the help of the given subcommand(s) ``` -------------------------------- ### Create Oxide Instance from Image CLI Example Source: https://docs.oxide.computer/cli/guides/introduction Example of creating a new Oxide instance from a specified image using the CLI. It allows configuration of instance name, project, resources (CPU, memory), and hostname. The `--start` flag initiates the instance immediately. ```bash oxide instance from-image \ --image bookworm \ --name pegasus \ --project prototypes \ --description "Phasing cloaking device" \ --hostname pegasus \ --memory 16g \ --ncpus 8 \ --size 200g \ --start ``` -------------------------------- ### Initiate Rack Configuration Setup Source: https://docs.oxide.computer/guides/system/initial-rack-setup Launches the 'wicket setup' command shell, allowing users to configure various aspects of the rack. This command is used in conjunction with the Wicket UI to manage rack settings. ```Shell ssh wicket@${TP_ADDRESS} setup ``` -------------------------------- ### Install Oxide Go SDK Source: https://docs.oxide.computer/api/guides/sdks Command to install the Oxide Go SDK using `go get`. This command should be run within your module dependencies directory and requires Go 1.21.x or above. ```bash $ go get github.com/oxidecomputer/oxide.go@latest ``` -------------------------------- ### Install ncal package using apt Source: https://docs.oxide.computer/guides/quickstart Installs the 'ncal' package on a Debian-based system using the apt package manager. It assumes 'apt update' has already been run. The output shows the installation process and confirmation. ```bash sudo apt update sudo apt install ncal ``` -------------------------------- ### Run Example Workload (Shell) Source: https://docs.oxide.computer/guides/integrations/rancher Applies a sample Nginx deployment workload to the Oxide Kubernetes cluster. This command uses a standard Kubernetes example YAML from an external URL. ```shell $ kubectl apply -f https://k8s.io/examples/application/deployment.yaml ``` -------------------------------- ### Verify Example Workload Readiness (Shell) Source: https://docs.oxide.computer/guides/integrations/rancher Checks the status of deployments within the Kubernetes cluster, specifically verifying if the 'nginx-deployment' is running and ready. This confirms the sample workload is functioning correctly. ```shell $ kubectl get deployment ``` -------------------------------- ### Retrieve Rack Configuration TOML Template Source: https://docs.oxide.computer/guides/system/initial-rack-setup Command to fetch the TOML configuration template for the Oxide Rack. This file is used to define network settings and other configurations. ```bash ssh wicket@${TP_ADDRESS} setup get-config > rack.toml ``` -------------------------------- ### POST /v1/instances/{instance}/start Source: https://docs.oxide.computer/api/instance_start Boots a specified instance. You need to provide the instance's name or ID. Optionally, you can specify the project ID. ```APIDOC ## POST /v1/instances/{instance}/start ### Description Boots a specified instance. You need to provide the instance's name or ID. Optionally, you can specify the project ID. ### Method POST ### Endpoint /v1/instances/{instance}/start ### Parameters #### Path Parameters - **instance** (string) - Required - Name or ID of the instance. Can be the instance's ID or name. #### Query Parameters - **project** (string) - Optional - Name or ID of the project. Can be the project's ID or name. ### Request Body This endpoint does not require a request body. ### Response #### Success Response (200) - **auto_restart_cooldown_expiration** (date-time) - The time at which the auto-restart cooldown period for this instance completes, permitting it to be automatically restarted again. If the instance enters the `Failed` state, it will not be restarted until after this time. - **auto_restart_enabled** (boolean) - `true` if this instance's auto-restart policy will permit the control plane to automatically restart it if it enters the `Failed` state. - **auto_restart_policy** (string) - The auto-restart policy configured for this instance, or `null` if no explicit policy has been configured. - **boot_disk_id** (uuid) - The ID of the disk used to boot this Instance, if a specific one is assigned. - **description** (string) - Human-readable free-form text about a resource. - **hostname** (string) - RFC1035-compliant hostname for the Instance. - **id** (uuid) - Unique, immutable, system-controlled identifier for each resource. - **memory** (uint64) - Memory allocated for this Instance (in bytes). - **name** (string) - Unique, mutable, user-controlled identifier for each resource. - **ncpus** (uint16) - Number of CPUs allocated for this Instance. - **project_id** (uuid) - ID for the project containing this Instance. - **run_state** (string) - Running state of an Instance (primarily: booted or stopped). - **time_created** (date-time) - Timestamp when this resource was created. - **time_last_auto_restarted** (date-time) - The timestamp of the most recent time this instance was automatically restarted by the control plane. - **time_modified** (date-time) - Timestamp when this resource was last modified. - **time_run_state_updated** (date-time) - Timestamp when the instance's run state was last updated. #### Response Example ```json { "auto_restart_cooldown_expiration": "2023-10-27T10:00:00Z", "auto_restart_enabled": true, "auto_restart_policy": "best_effort", "boot_disk_id": "a1b2c3d4-e5f6-7890-1234-567890abcdef", "description": "My web server instance", "hostname": "webserver-01", "id": "09876543-21fe-dcba-0987-654321fedcba", "memory": 1073741824, "name": "my-instance", "ncpus": 2, "project_id": "fedcba09-8765-4321-fedc-ba0987654321", "run_state": "starting", "time_created": "2023-10-26T09:00:00Z", "time_last_auto_restarted": null, "time_modified": "2023-10-26T09:30:00Z", "time_run_state_updated": "2023-10-27T10:05:00Z" } ``` #### Error Responses - **4XX**: Client Error - **5XX**: Server Error ``` -------------------------------- ### Create an Instance from an Image using CLI Source: https://docs.oxide.computer/guides/quickstart-cli Launches a new virtual machine instance from a previously uploaded image. It specifies instance configuration details like image name, project, name, hostname, memory, CPU, disk size, and whether to start it immediately. ```bash $ oxide instance from-image \ --image bookworm \ --name pegasus \ --project prototypes \ --description "Phasing cloaking device" \ --hostname pegasus \ --memory 16g \ --ncpus 8 \ --size 200g \ --start ``` -------------------------------- ### SSH into Rack Wicket for Updates and Setup Source: https://docs.oxide.computer/guides/system/initial-rack-setup Establishes an SSH connection to the Oxide rack's wicket. This is a prerequisite for performing software updates or accessing the rack setup command shell. ```Shell ssh wicket@${TP_ADDRESS} ``` -------------------------------- ### Create a Project using CLI Source: https://docs.oxide.computer/guides/quickstart-cli Creates a new project within the Oxide platform. It requires a project name and an optional description. This is a fundamental step for organizing resources. ```bash $ oxide project create --name prototypes --description "experimental work" ``` -------------------------------- ### Set Rack Recovery User Password Source: https://docs.oxide.computer/guides/system/initial-rack-setup Configures the password for the 'recovery' system user on the Oxide rack. This user is essential for setup and recovery operations. ```Shell ssh wicket@${TP_ADDRESS} setup set-password ``` -------------------------------- ### Connect to Oxide API using Go SDK Source: https://docs.oxide.computer/api/guides/sdks Example of using the Go SDK to create an API client and create a new project. It demonstrates configuring the client with address and token, handling errors, and making a `ProjectCreate` call. ```go package main import ( "context" "fmt" "github.com/oxidecomputer/oxide.go/oxide" ) func main() { cfg := oxide.Config{ Address: "https://api.oxide.computer", Token: "oxide-abc123", } client, err := oxide.NewClient(&cfg) if err != nil { panic(err) } ctx := context.Background() params := oxide.ProjectCreateParams{ Body: &oxide.ProjectCreate{ Description: "A sample project", Name: oxide.Name("my-project"), }, } resp, err := client.ProjectCreate(ctx, params) if err != nil { panic(err) } fmt.Printf("%+v\n", resp) } ``` -------------------------------- ### Create Instance with New Disks using Oxide CLI Source: https://docs.oxide.computer/api/guides/introduction This example shows how to create an instance along with new disks (both from an image and a blank disk) using the `oxide api` CLI. It details the instance configuration and defines the disks to be created, including their source. It also demonstrates how to attach user data via a base64 encoded file. ```shell oxide api /v1/instances?project=myproj --method POST --input - << EOF { "name": "myinstance2", "description": "my second Oxide instance", "hostname": "myinst2", "memory": 4294967296, "ncpus": 2, "disks": [ { "type": "create", "name": "ubuntu-disk", "description": "from a project image", "size": 4294967296, "disk_source": { "type": "image", "image_id": "$(oxide api '/v1/images/ubuntu-customized?project=myproj' | jq -r .id)" } }, { "type": "create", "name": "additional-disk", "description": "blank disk for data storage", "size": 21474836480, "disk_source": { "type": "blank", "block_size": 4096 } } ], "network_interfaces": { "type": "default" }, "external_ips": [ { "type": "ephemeral", "pool_name": "default" } ], "user_data": "$(cat mycloudinit.yaml | base64)", "start": true } EOF ``` -------------------------------- ### Create Instance with Existing Disks using Oxide CLI Source: https://docs.oxide.computer/api/guides/introduction This example illustrates how to create a new instance and attach existing disks to it using the `oxide api` CLI. It specifies instance details such as name, hostname, memory, and CPUs, and lists the disks to attach by name. Network interface and external IP configuration are also included. ```shell oxide api /v1/instances?project=myproj --method POST --input - << EOF { "name": "myinstance", "description": "my first Oxide instance", "hostname": "myinst", "memory": 4294967296, "ncpus": 2, "disks": [ { "type": "attach", "name": "boot-disk" }, { "type": "attach", "name": "data-disk" } ], "network_interfaces": { "type": "default" }, "external_ips": [ { "type": "ephemeral", "pool_name": "default" } ], "start": true } EOF ``` -------------------------------- ### POST /v1/instances (Create Instance with New Disks) Source: https://docs.oxide.computer/api Creates a new instance along with new disks (either from an image or blank). This is a comprehensive way to deploy a new, fully configured instance. ```APIDOC ## POST /v1/instances ### Description Creates a new instance along with new disks (either from an image or blank). This is a comprehensive way to deploy a new, fully configured instance. ### Method POST ### Endpoint /v1/instances?project=myproj ### Parameters #### Query Parameters - **project** (string) - Required - The project to create the instance within. #### Request Body - **name** (string) - Required - The name of the instance. - **description** (string) - Optional - A description for the instance. - **hostname** (string) - Required - The hostname for the instance. - **memory** (integer) - Required - The amount of memory for the instance in bytes. - **ncpus** (integer) - Required - The number of virtual CPUs for the instance. - **disks** (array) - Required - A list of disks to create and attach to the instance. - Each object in the array should have: - **type** (string) - Required - The type of disk operation. Must be 'create'. - **name** (string) - Required - The name of the disk to create. - **description** (string) - Optional - A description for the disk. - **size** (integer) - Required - The size of the disk in bytes. - **disk_source** (object) - Required - Specifies the source of the disk. - **type** (string) - Required - The type of disk source ('image' or 'blank'). - **image_id** (string) - Required if type is 'image' - The ID of the image to create the disk from. - **block_size** (integer) - Required if type is 'blank' - The block size for the blank disk. - **network_interfaces** (object) - Required - Defines the network interfaces for the instance. - **type** (string) - Required - The type of network interface. Must be 'default'. - **external_ips** (array) - Required - A list of external IP configurations. - Each object in the array should have: - **type** (string) - Required - The type of external IP. Must be 'ephemeral'. - **pool_name** (string) - Required - The name of the IP pool to use. - **user_data** (string) - Optional - User data to be passed to the instance, typically base64 encoded. - **start** (boolean) - Optional - Whether to start the instance after creation. Defaults to true. ### Request Example ```json { "name": "myinstance2", "description": "my second Oxide instance", "hostname": "myinst2", "memory": 4294967296, "ncpus": 2, "disks": [ { "type": "create", "name": "ubuntu-disk", "description": "from a project image", "size": 4294967296, "disk_source": { "type": "image", "image_id": "$(oxide api '/v1/images/ubuntu-customized?project=myproj' | jq -r .id)" } }, { "type": "create", "name": "additional-disk", "description": "blank disk for data storage", "size": 21474836480, "disk_source": { "type": "blank", "block_size": 4096 } } ], "network_interfaces": { "type": "default" }, "external_ips": [ { "type": "ephemeral", "pool_name": "default" } ], "user_data": "$(cat mycloudinit.yaml | base64)", "start": true } ``` ### Response #### Success Response (200) - **id** (string) - The unique identifier for the created instance. - **name** (string) - The name of the instance. - **hostname** (string) - The hostname of the instance. - **state** (string) - The current state of the instance (e.g., 'running', 'stopped'). #### Response Example ```json { "id": "instance-fghij", "name": "myinstance2", "hostname": "myinst2", "state": "running" } ``` ``` -------------------------------- ### GET /v1/instances/{instance}/serial-console Source: https://docs.oxide.computer/api/instance_serial_console Fetches the serial console output for a specific instance. You can filter the output by specifying a starting offset or a number of most recent bytes, and by setting a maximum byte count. ```APIDOC ## GET /v1/instances/{instance}/serial-console ### Description Fetches the serial console output for a specific instance. You can specify the starting point for the data using 'from_start' or 'most_recent' and limit the amount of data returned with 'max_bytes'. ### Method GET ### Endpoint `/v1/instances/{instance}/serial-console` ### Parameters #### Path Parameters - **instance** (string) - Required - Name or ID of the instance. - **id**: Instance ID - **name**: Instance Name #### Query Parameters - **from_start** (uint64) - Optional - Character index in the serial buffer from which to read, counting the bytes output since instance start. If this is not provided, `most_recent` must be provided, and if this _is_ provided, `most_recent` must _not_ be provided. - **max_bytes** (uint64) - Optional - Maximum number of bytes of buffered serial console contents to return. If the requested range runs to the end of the available buffer, the data returned will be shorter than `max_bytes`. - **most_recent** (uint64) - Optional - Character index in the serial buffer from which to read, counting _backward_ from the most recently buffered data retrieved from the instance. (See note on `from_start` about mutual exclusivity) - **project** (string) - Optional - Name or ID of the project, only required if `instance` is provided as a `Name`. - **id**: Project ID - **name**: Project Name ### Response #### Success Response (200) - **data** (array) - Required - The bytes starting from the requested offset up to either the end of the buffer or the request's `max_bytes`. Provided as a u8 array rather than a string, as it may not be UTF-8. - **element type**: uint8 - **last_byte_offset** (uint64) - Required - The absolute offset since boot (suitable for use as `byte_offset` in a subsequent request) of the last byte returned in `data`. #### Error Response (4XX/5XX) - **Error** - Description of the error. ``` -------------------------------- ### Create and serve a static HTML file with Python HTTP server Source: https://docs.oxide.computer/guides/quickstart Sets up a simple HTTP server in a Linux VM to serve a static 'Hello World' HTML file. It creates a directory, an index.html file, and runs the server in the background. Includes verification with curl. ```bash mkdir public cd public echo Hello World > index.html nohup sudo python3 -m http.server 80 & # Verification from within the VM: curl http://localhost # Verification from an external workstation (after firewall configuration): curl http://{external IP of your VM} ``` -------------------------------- ### Extract and Convert Client Signing Keys using OpenSSL Source: https://docs.oxide.computer/guides/operator/keycloak Commands to extract certificate and private key from a PKCS12 keystore into PEM format, and then convert them to DER format, suitable for API/CLI or Console IdP setup in Oxide. ```bash openssl pkcs12 -in keystore.p12 -out idp-cert.pem -clcerts -nokeys -legacy openssl pkcs12 -in keystore.p12 -out idp-key.pem -nocerts -nodes -legacy ``` ```bash # For API/CLI IdP setup openssl x509 -in idp-cert.pem -outform der | base64 > idp-cert.base64 openssl rsa -in idp-key.pem -outform der -traditional | base64 > idp-key.base64 ``` ```bash # For Console IdP setup openssl x509 -in idp-cert.pem -outform der -out idp-cert.der openssl rsa -in idp-key.pem -outform der -traditional -out idp-key.der ``` -------------------------------- ### Upload TLS Certificate and Key via SSH Source: https://docs.oxide.computer/guides/system/initial-rack-setup Commands to upload a TLS certificate chain and its corresponding private key to the Oxide Rack using SSH. Assumes the certificate and key files are available locally. ```bash ssh wicket@${TP_ADDRESS} setup upload-cert < ${CERT-CHAIN}.pem ``` ```bash ssh wicket@${TP_ADDRESS} setup upload-key < ${CERT-KEY}.pem ``` -------------------------------- ### Create Instance API Source: https://docs.oxide.computer/api/instance_create This endpoint allows for the creation of a new instance with various configurable options such as boot disk, networking, and resources. ```APIDOC ## POST /v1/instances ### Description Create a new instance with specified configurations. ### Method POST ### Endpoint /v1/instances ### Parameters #### Query Parameters - **project** (string) - Required - Name or ID of the project. #### Request Body - **anti_affinity_groups** (array) - Optional - Anti-Affinity groups which this instance should be added. - **id** (string) - Optional - ID of the anti-affinity group. - **name** (string) - Optional - Name of the anti-affinity group. - **auto_restart_policy** (string) - Optional - The auto-restart policy for this instance. Possible values: "never", "best_effort". - **boot_disk** (object) - Optional - Describes the instance's disks at creation time. Can be of type "create" or "attach". - **description** (string) - Optional - A description for the instance. - **disks** (array) - Optional - A list of disks to be attached to the instance. Disk attachments of type "create" will be created, while those of type "attach" must already exist. - **create** (object) - Disk creation parameters. - **attach** (object) - Disk attachment parameters. - **external_ips** (array) - Optional - The external IP addresses provided to this instance. Parameters for creating an external IP address. - **ephemeral** (object) - Ephemeral IP configuration. - **floating** (object) - Floating IP configuration. - **hostname** (string) - Required - The hostname to be assigned to the instance. - **memory** (uint64) - Required - The amount of RAM (in bytes) to be allocated to the instance. - **name** (string) - Required - The name of the instance. Must follow naming conventions. - **ncpus** (uint16) - Required - The number of vCPUs to be allocated to the instance. - **network_interfaces** (array) - Optional - The network interfaces to be created for this instance. - **create** (object) - Network interface creation parameters. - **default** (object) - Default network interface configuration. - **none** (object) - No network interface configuration. - **ssh_public_keys** (array) - Optional - An allowlist of SSH public keys to be transferred to the instance via cloud-init. - **id** (string) - Optional - ID of the SSH public key. - **name** (string) - Optional - Name of the SSH public key. - **start** (boolean) - Optional - Should this instance be started upon creation; true by default. - **user_data** (byte) - Optional - User data for instance initialization systems (e.g., cloud-init). Must be a Base64-encoded string. ### Request Example ```json { "project": "my-project", "name": "my-instance", "hostname": "instance.example.com", "memory": 1073741824, "ncpus": 2, "boot_disk": { "create": { "size_gb": 50, "type": "pd-standard" } }, "disks": [ { "create": { "size_gb": 100, "type": "pd-ssd" } } ], "network_interfaces": [ { "create": { "network": "default" } } ], "ssh_public_keys": [ { "name": "my-key", "id": "ssh-rsa AAAAB3NzaC1yc2EAAA..." } ], "start": true } ``` ### Response #### Success Response (200) - **Instance** (object) - The created instance object. - **id** (string) - The unique identifier for the instance. - **name** (string) - The name of the instance. - **hostname** (string) - The hostname of the instance. - **memory** (uint64) - The allocated memory in bytes. - **ncpus** (uint16) - The number of allocated vCPUs. - **status** (string) - The current status of the instance. - ... (other instance properties) #### Response Example ```json { "id": "inst-12345abc", "name": "my-instance", "hostname": "instance.example.com", "memory": 1073741824, "ncpus": 2, "status": "provisioning", "created_at": "2023-10-27T10:00:00Z" } ``` ``` -------------------------------- ### Show Switch Port Settings with Oxide CLI Source: https://docs.oxide.computer/guides/operator/expanding-connectivity Displays the network configuration for switch ports, including speed, duplex, and BGP peer details. This command is useful for understanding the current network setup before making changes. ```bash $ oxide system networking switch-port-settings show switch1/qsfp0 ============= Autoneg Fec Speed false None Speed100G Address Lot VLAN 169.254.20.2/30 initial-infra None BGP Peer Config Export Import Communities Connect Retry Delay Open Enforce First AS Hold Time Idle Hold Time Keepalive Local Pref Md5 Auth Min TTL MED Remote ASN VLAN 169.254.20.1 as65547 [no filtering] [no filtering] [] 3 3 false 6 0 2 None None None None None None switch0/qsfp0 ============= Autoneg Fec Speed false None Speed100G Address Lot VLAN 169.254.10.2/30 initial-infra None BGP Peer Config Export Import Communities Connect Retry Delay Open Enforce First AS Hold Time Idle Hold Time Keepalive Local Pref Md5 Auth Min TTL MED Remote ASN VLAN 169.254.10.1 as65547 [no filtering] [no filtering] [] 3 3 false 6 0 2 None None None None None None ``` -------------------------------- ### POST /v1/instances (Create Instance with Existing Disks) Source: https://docs.oxide.computer/api Creates a new instance and attaches existing disks to it. This allows for deploying instances with pre-configured storage. ```APIDOC ## POST /v1/instances ### Description Creates a new instance and attaches existing disks to it. This allows for deploying instances with pre-configured storage. ### Method POST ### Endpoint /v1/instances?project=myproj ### Parameters #### Query Parameters - **project** (string) - Required - The project to create the instance within. #### Request Body - **name** (string) - Required - The name of the instance. - **description** (string) - Optional - A description for the instance. - **hostname** (string) - Required - The hostname for the instance. - **memory** (integer) - Required - The amount of memory for the instance in bytes. - **ncpus** (integer) - Required - The number of virtual CPUs for the instance. - **disks** (array) - Required - A list of disks to attach to the instance. - Each object in the array should have: - **type** (string) - Required - The type of disk attachment. Must be 'attach'. - **name** (string) - Required - The name of the existing disk to attach. - **network_interfaces** (object) - Required - Defines the network interfaces for the instance. - **type** (string) - Required - The type of network interface. Must be 'default'. - **external_ips** (array) - Required - A list of external IP configurations. - Each object in the array should have: - **type** (string) - Required - The type of external IP. Must be 'ephemeral'. - **pool_name** (string) - Required - The name of the IP pool to use. - **start** (boolean) - Optional - Whether to start the instance after creation. Defaults to true. ### Request Example ```json { "name": "myinstance", "description": "my first Oxide instance", "hostname": "myinst", "memory": 4294967296, "ncpus": 2, "disks": [ { "type": "attach", "name": "boot-disk" }, { "type": "attach", "name": "data-disk" } ], "network_interfaces": { "type": "default" }, "external_ips": [ { "type": "ephemeral", "pool_name": "default" } ], "start": true } ``` ### Response #### Success Response (200) - **id** (string) - The unique identifier for the created instance. - **name** (string) - The name of the instance. - **hostname** (string) - The hostname of the instance. - **state** (string) - The current state of the instance (e.g., 'running', 'stopped'). #### Response Example ```json { "id": "instance-abcde", "name": "myinstance", "hostname": "myinst", "state": "running" } ``` ``` -------------------------------- ### Show Current Switch Port Settings Source: https://docs.oxide.computer/guides/operator/configuring-bgp Displays the current network configuration for a specific switch port, including IP addresses, associated lots, and BGP peer information. This command is used to audit the existing setup before making changes. ```bash oxide system networking switch-port-settings show \ switch0/qsfp0 ```