curl --request POST \
--url https://compute.{region}.basaltic.sh/v1/instances/{instance_id}/nics \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"interface": "e8a1c2d3-4b5f-4a6e-9c0d-1e2f3a4b5c6d"
}
'import requests
url = "https://compute.{region}.basaltic.sh/v1/instances/{instance_id}/nics"
payload = { "interface": "e8a1c2d3-4b5f-4a6e-9c0d-1e2f3a4b5c6d" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({interface: 'e8a1c2d3-4b5f-4a6e-9c0d-1e2f3a4b5c6d'})
};
fetch('https://compute.{region}.basaltic.sh/v1/instances/{instance_id}/nics', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://compute.{region}.basaltic.sh/v1/instances/{instance_id}/nics",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'interface' => 'e8a1c2d3-4b5f-4a6e-9c0d-1e2f3a4b5c6d'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://compute.{region}.basaltic.sh/v1/instances/{instance_id}/nics"
payload := strings.NewReader("{\n \"interface\": \"e8a1c2d3-4b5f-4a6e-9c0d-1e2f3a4b5c6d\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://compute.{region}.basaltic.sh/v1/instances/{instance_id}/nics")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"interface\": \"e8a1c2d3-4b5f-4a6e-9c0d-1e2f3a4b5c6d\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://compute.{region}.basaltic.sh/v1/instances/{instance_id}/nics")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"interface\": \"e8a1c2d3-4b5f-4a6e-9c0d-1e2f3a4b5c6d\"\n}"
response = http.request(request)
puts response.read_body{
"attachment": {
"interface_id": "e8a1c2d3-4b5f-4a6e-9c0d-1e2f3a4b5c6d",
"mac": "02:1a:2b:3c:4d:5e",
"boot_index": 0,
"external": false,
"restart_required": true,
"addresses": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"family": "ipv4",
"address": "<string>",
"prefix": "<string>",
"primary": true,
"floating_ips": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"crn": "<string>",
"visibility": "public",
"address": "<string>"
}
]
}
]
}
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication required",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "ACCESS_DENIED",
"message": "You don't have permission to perform this action",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "NOT_FOUND",
"message": "Resource not found",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"params": {
"instances": 2,
"pools": 0
}
}
}{
"error": {
"code": "IDEMPOTENCY_KEY_REUSED",
"message": "This Idempotency-Key was already used with a different request payload",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}Adjuntar una NIC existente a una instancia
Conecta una interfaz de red independiente existente. La instancia debe estar en ejecución o detenida. Para crear una interfaz, use POST /v1/interfaces en la API de red antes de adjuntarla. Esta operación nunca aprovisiona una interfaz.
El adjunto es duradero en el momento en que se devuelve: es parte de la especificación de la instancia y sobrevive a los reinicios. La entrega al huésped es asíncrona y la respuesta dice lo que se necesita.
Una instancia detenida aparece con el dispositivo, y restart_required está ausente. Se le da una instancia en ejecución al dispositivo mientras se ejecuta donde la región admite que: la llamada regresa antes de que el invitado la tenga, restart_required está ausente, y la interfaz aparece en el invitado momentos más tarde — poll GET /v1/instances/{instance_id}/nics, o observar al invitado para un enlace que lleva el MAC en esta respuesta. Cuando la región no lo hace, la respuesta establece restart_required: reiniciar la instancia con {"hard": true} para entregarla. Un reinicio suave es ACPI dentro del mismo lanzador y no lo hará.
La dirección es de DHCP de cualquier manera. Nada configura la nueva interfaz dentro del invitado, por lo que una imagen que no trae un dispositivo de red cuando aparece (cloud-init hotplug, NetworkManager, systemd-networkd con una coincidencia de comodín) mantiene el enlace sin una dirección hasta que algo en el invitado pide el arrendamiento.
curl --request POST \
--url https://compute.{region}.basaltic.sh/v1/instances/{instance_id}/nics \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"interface": "e8a1c2d3-4b5f-4a6e-9c0d-1e2f3a4b5c6d"
}
'import requests
url = "https://compute.{region}.basaltic.sh/v1/instances/{instance_id}/nics"
payload = { "interface": "e8a1c2d3-4b5f-4a6e-9c0d-1e2f3a4b5c6d" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({interface: 'e8a1c2d3-4b5f-4a6e-9c0d-1e2f3a4b5c6d'})
};
fetch('https://compute.{region}.basaltic.sh/v1/instances/{instance_id}/nics', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://compute.{region}.basaltic.sh/v1/instances/{instance_id}/nics",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'interface' => 'e8a1c2d3-4b5f-4a6e-9c0d-1e2f3a4b5c6d'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://compute.{region}.basaltic.sh/v1/instances/{instance_id}/nics"
payload := strings.NewReader("{\n \"interface\": \"e8a1c2d3-4b5f-4a6e-9c0d-1e2f3a4b5c6d\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://compute.{region}.basaltic.sh/v1/instances/{instance_id}/nics")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"interface\": \"e8a1c2d3-4b5f-4a6e-9c0d-1e2f3a4b5c6d\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://compute.{region}.basaltic.sh/v1/instances/{instance_id}/nics")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"interface\": \"e8a1c2d3-4b5f-4a6e-9c0d-1e2f3a4b5c6d\"\n}"
response = http.request(request)
puts response.read_body{
"attachment": {
"interface_id": "e8a1c2d3-4b5f-4a6e-9c0d-1e2f3a4b5c6d",
"mac": "02:1a:2b:3c:4d:5e",
"boot_index": 0,
"external": false,
"restart_required": true,
"addresses": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"family": "ipv4",
"address": "<string>",
"prefix": "<string>",
"primary": true,
"floating_ips": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"crn": "<string>",
"visibility": "public",
"address": "<string>"
}
]
}
]
}
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication required",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "ACCESS_DENIED",
"message": "You don't have permission to perform this action",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "NOT_FOUND",
"message": "Resource not found",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"params": {
"instances": 2,
"pools": 0
}
}
}{
"error": {
"code": "IDEMPOTENCY_KEY_REUSED",
"message": "This Idempotency-Key was already used with a different request payload",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}compute:AttachNIC. Consulte permisos de computación para obtener la lista completa, lo que cubre cada una y un ejemplo de directiva.Autorizaciones
Un token bearer de OAuth 2.0, enviado como Authorization: Bearer <token>. Esta es la forma recomendada de autenticación.
Obtén el token intercambiando el par de claves de acceso de una cuenta de servicio en POST /v1/oauth/token con grant_type=client_credentials. Es el flujo estándar de credenciales de cliente; las bibliotecas compatibles con OAuth pueden obtener y renovar el token por ti.
curl -s -u "$KEY_ID:$SECRET" -d grant_type=client_credentials \
https://iam.basaltic.sh/v1/oauth/token
Los tokens duran una hora por defecto. El mismo par de claves de acceso también sirve como credencial AWS SigV4 para el endpoint de objetos compatible con S3, que solo acepta ese método de autenticación.
Encabezados
Clave opcional generada por el cliente que hace que una creación sea segura para la reproducción. Al volver a intentar una solicitud con la misma clave, se devuelve el resultado original literalmente en lugar de crear un recurso duplicado. Se rechaza la reutilización de una clave con un cuerpo de solicitud diferente (422); una solicitud cuya clave todavía se está procesando devuelve 409. Los registros se mantienen durante 24 horas. Usa un UUID o un token único similar.
255Parámetros de ruta
ID de instancia
Cuerpo
UUID de interfaz independiente existente o VPC/subred/CRN de interfaz completo. Los nombres desnudos carecen del padre de subred y se rechazan. Mantiene su dirección, MAC y grupos de seguridad; detach lo devuelve a la posición independiente en lugar de destruirlo.
1"e8a1c2d3-4b5f-4a6e-9c0d-1e2f3a4b5c6d"
Respuesta
Adjunto aceptado
Show child attributes
Show child attributes

