31.01.2025

Automação

Lista de chaves de API

Chaves de API para acessar seu projeto.

API

Serverspace Public API - uma API pública para interação com os serviços do Serverspace. As ações executadas no painel de controle do Serverspace também podem ser executadas usando a API pública.

Autorização

Para trabalhar com a API pública, crie uma chave de API para o projeto e passe-a no cabeçalho X-API-KEY em cada solicitação. Por exemplo, ao usar o utilitário cURL, o cabeçalho teria a seguinte aparência:

-H "X-API-KEY: lmGwbvllpIqIrKROOCLgE5Z941MKP5EYfbkgwtqJZGigfXUTpuYRpNQkCqShmm6r"

Todas as solicitações de API devem ser feitas por meio de HTTPS. Aqui está o URL do ponto de extremidade da API pública:

https://api.serverspace.io/


Exemplos de uso

Vamos obter informações sobre o projeto enviando uma solicitação usando o utilitário cURL:

curl -X GET
https://api.serverspace.io/api/v1/project
-H 'content-type: application/json'
-H 'x-api-key: lmGwbvllpIqIrKROOCLgE5Z941MKP5EYfbkgwtqJZGigfXUTpuYRpNQkCqShmm6r'

Isso retornará informações sobre o projeto:

{
"project": {
"balance": 400.07,
"created": "2019-04-08T10:35:53.7021047Z",
"currency": "EUR",
"id": 1,
"state": "Active"
}
}

Vamos criar um servidor com a seguinte configuração: Amsterdã, nome: "api-example", sistema operacional Debian 10.7, configuração do servidor - 1 GB de RAM, 1 CPU, unidade de inicialização SSD de 25 GB, 50 Mbps:

curl -X POST
https://api.serverspace.io/api/v1/servers
-H 'content-type: application/json'
-H 'x-api-key: lmGwbvllpIqIrKROOCLgE5Z941MKP5EYfbkgwtqJZGigfXUTpuYRpNQkCqShmm6r'
-d '{
"location_id": "am2",
"image_id": "Debian-10.7-X64",
"cpu": 1,
"ram_mb": 1024,
"volumes": [
{
"name": "boot",
"size_mb": 25600
}
],
"networks": [
{
"bandwidth_mbps": 50
}
],
"name": "api-example"
}'

O resultado retorna um ID de tarefa, que pode ser usado para rastrear o processo de criação do servidor:

{
"task_id" : "lt1507097"
}

CLI

O s2ctl é um Serverspace na linha de comando. A CLI lhe dá a capacidade de controlar sua infraestrutura por meio do terminal, assim como no painel de controle. A ferramenta está disponível em nosso Github.

Instalação

O s2ctl está disponível para Linux e Windows como um arquivo binário separado. Baixe o arquivo do Github e descompacte-o.

Instalação no Linux

  1. Baixe o arquivo do repositório do GitHub:
    wget https://github.com/itglobalcom/s2ctl/releases/download/vX.X.X/s2ctl-vX.X.X-linux.tar.gz

    X.X.X.X é o número da versão mais recente do utilitário.

  2. Descompacte o arquivo baixado:
    tar -xzf s2ctl-vX.X.X-linux.tar.gz
  3. Navegue até o diretório criado e execute o utilitário s2ctl:
    cd s2ctl-vX.X.X-linux
    ./s2ctl --help
  4. (Opcional) Você também pode adicionar o diretório que contém o executável s2ctl à variável de ambiente $PATH para acessar o utilitário de qualquer lugar do sistema operacional. Para ver o que está na variável $PATH neste momento, digite o comando:
    echo $PATH

    Para adicionar um novo diretório à lista, use o comando:

    export PATH=$PATH:""

    A variável $PATH é definida pelo shell sempre que ele é iniciado, mas você pode fazer com que ele inclua o caminho para o utilitário em cada novo shell que abrir. O método exato depende do shell que você está usando.
    Por exemplo, no bash, você precisa adicionar a seguinte linha sobre o arquivo correspondente:

    echo 'export PATH=$PATH:""' >> .bashrc

    Use o comando para aplicar as alterações:

    source ~/.bashrc

Instalação no Windows

cd
s2ctl --help

Autorização

Para trabalhar com a CLI, você deve criar uma chave de API para o projeto e também um contexto. Caso contrário, você precisará passar a chave de API em cada solicitação.

Criação de contexto

O uso de contextos simplifica o uso do utilitário s2ctl. Nesse caso, você não precisa especificar explicitamente a chave de API para cada comando.
Para criar um contexto, use o seguinte comando:

s2ctl context create -k -n

Por exemplo:

s2ctl context create -k lmGwbvllpIqIrKROOCLgE5Z941MKP5EYfbkgwtqJZGigfXUTpuYRpNQkCqShmm6r -n example

Transferência de chave

Para passar a chave da API explicitamente, ela deve ser especificada no final do comando com a opção --apikey:

s2ctl --apikey

Por exemplo:

s2ctl images --apikey lmGwbvllpIqIrKROOCLgE5Z941MKP5EYfbkgwtqJZGigfXUTpuYRpNQkCqShmm6r

Exemplos de uso

Obtenha informações sobre o projeto com o seguinte comando:

s2ctl project show

Isso retornará informações sobre o projeto:

id: '1'
balance: '400.24'
currency: EUR
state: Active
created: '2019-04-08T10:35:53.7021047Z'

Criar servidor:

s2ctl server create --name test-cli --location nj3 --image Ubuntu-20.04-X64 --cpu 2 --ram 2048M --volume boot:30720M --volume volume:10240M --public-network 50 --public-network 60

Isso retornará o ID da tarefa, que pode ser usado para rastrear o processo de criação do servidor:

task_id: lt1512053

Terraform

O Serverspace do provedor Terraform permite que você gerencie recursos de nuvem usando a abordagem Infraestrutura como código. O gerenciamento é feito usando arquivos de configuração especiais nos quais você descreve o estado desejado da sua infraestrutura.

Instalando o Terraform

Primeiro, vamos instalar o Terraform em seu sistema operacional. Recomendamos usar o manual do desenvolvedor do Terraform.

Configuração do provedor

terraform {
required_providers {
serverspace = {
source = "itglobalcom/serverspace"
version = "0.2.0"
}
}
}
variable "s2_token" {
type = string
default = ""
}
provider "serverspace" {
key = var.s2_token
}
terraform init

Você verá a seguinte mensagem se a inicialização for bem-sucedida:

Initializing the backend...
Initializing provider plugins...
- Finding itglobalcom/serverspace versions matching "0.2.0"...
- Installing itglobalcom/serverspace v0.2.0...
- Installed itglobalcom/serverspace v0.2.0 (self-signed, key ID 062XXXXXXXXXXXX)
Partner and community providers are signed by their developers.
If you'd like to know more about provider signing, you can read about it here: https://www.terraform.io/docs/cli/plugins/signing.html
Terraform has created a lock file .terraform.lock.hcl to record the provider selections it made above. Include this file in your version control repository so that Terraform can guarantee to make the same selections by default when you run "terraform init" in the future.
Terraform has been successfully initialized!
You may now begin working with Terraform. Try running "terraform plan" to see any changes that are required for your infrastructure. All Terraform commands should now work.
If you ever set or change modules or backend configuration for Terraform, rerun this command to reinitialize your working directory. If you forget, other commands will detect it and remind you to do so if necessary.

Descrição de sua infraestrutura

Com o Serverspace Terraform Provider, você pode criar uma infraestrutura com várias configurações. Você pode encontrar a documentação detalhada no Terraform Registry.
Vamos dar uma olhada no exemplo de criação de uma infraestrutura simples com dois servidores conectados por meio de uma rede isolada:

Siga as etapas abaixo para configurar essa infraestrutura:

resource "serverspace_ssh" "terraform" {
name = "terraform-key"
public_key = "ssh-rsa AAAAB3Nza...JUDjlM= root@CentOS.local"
}
variable "pvt_key" {
type = string
default = ""
}
resource "serverspace_server" "server1" {
image = "Ubuntu-20.04-X64"
name = "server-1"
location = "am2"
cpu = 2
ram = 2048
boot_volume_size = 40*1024
volume {
name = "bar"
size = 20*1024
}
nic {
network = ""
network_type = "PublicShared"
bandwidth = 50
}
nic {
network = resource.serverspace_isolated_network.my_net.id
network_type = "Isolated"
bandwidth = 0
}
ssh_keys = [
resource.serverspace_ssh.terraform.id,
]
connection {
host = self.public_ip_addresses[0]
user = "root"
type = "ssh"
private_key = file(var.pvt_key)
timeout = "2m"
}
provisioner "remote-exec" {
inline = [
"export PATH=$PATH:/usr/bin",
"sudo apt-get update",
"sudo apt-get install -y redis-server",
"exit 0"
]
}
}
resource "serverspace_server" "server2" {
image = "Ubuntu-20.04-X64"
name = "server-2"
location = "am2"
cpu = 4
ram = 8192
boot_volume_size = 40*1024
nic {
network = ""
network_type = "PublicShared"
bandwidth = 70
}
nic {
network = resource.serverspace_isolated_network.my_net.id
network_type = "Isolated"
bandwidth = 0
}
}
resource "serverspace_isolated_network" "my_net" {
location = "am2"
name = "my_net"
description = "Example for Terraform"
network_prefix = "192.168.0.0"
mask = 24
}
terraform apply

Será exibida uma janela de diálogo:

Terraform used the selected providers to generate the following execution plan.
Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# serverspace_isolated_network.my_net will be created
+ resource "serverspace_isolated_network" "my_net" {
+ description = "Example for Terraform"
+ id = (known after apply)
+ location = "am2"
+ mask = 24
+ name = "my_net"
+ network_prefix = "192.168.0.0"
}
# serverspace_server.server1 will be created
+ resource "serverspace_server" "server1" {
+ boot_volume_id = (known after apply)
+ boot_volume_size = 40960
+ cpu = 2
+ id = (known after apply)
+ image = "Ubuntu-20.04-X64"
+ location = "am2"
+ name = "server-1"
+ public_ip_addresses = (known after apply)
+ ram = 2048
+ ssh_keys = (known after apply)
+ nic {
+ bandwidth = 0
+ id = (known after apply)
+ ip_address = (known after apply)
+ network = (known after apply)
+ network_type = "Isolated"
}
+ nic {
+ bandwidth = 50
+ id = (known after apply)
+ ip_address = (known after apply)
+ network_type = "PublicShared"
}
+ volume {
+ id = (known after apply)
+ name = "bar"
+ size = 20480
}
}
# serverspace_server.server2 will be created
+ resource "serverspace_server" "server2" {
+ boot_volume_id = (known after apply)
+ boot_volume_size = 40960
+ cpu = 4
+ id = (known after apply)
+ image = "Ubuntu-20.04-X64"
+ location = "am2"
+ name = "server-2"
+ public_ip_addresses = (known after apply)
+ ram = 8192
+ ssh_keys = (known after apply)
+ nic {
+ bandwidth = 0
+ id = (known after apply)
+ ip_address = (known after apply)
+ network = (known after apply)
+ network_type = "Isolated"
}
+ nic {
+ bandwidth = 70
+ id = (known after apply)
+ ip_address = (known after apply)
+ network_type = "PublicShared"
}
}
# serverspace_ssh.terraform will be created
+ resource "serverspace_ssh" "terraform" {
+ id = (known after apply)
+ name = "terraform-key"
+ public_key = "ssh-rsa AAAAB3Nza...JUDjlM= root@CentOS.local"
}
Plan: 4 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
serverspace_ssh.terraform: Creating...
serverspace_isolated_network.my_net: Creating...
serverspace_ssh.terraform: Creation complete after 1s [id=3181]
serverspace_isolated_network.my_net: Creation complete after 8s [id=l2n403]
serverspace_server.server2: Creating...
serverspace_server.server1: Creating...
serverspace_server.server1: Still creating... [10s elapsed]
serverspace_server.server2: Still creating... [10s elapsed]
...
serverspace_server.server1 (remote-exec): (Reading database ...
serverspace_server.server1 (remote-exec): (Reading database ... 5%
serverspace_server.server1 (remote-exec): (Reading database ... 10%
...
serverspace_server.server1: Creation complete after 1m3s [id=l2s190038]
Apply complete! Resources: 4 added, 0 changed, 0 destroyed.
terraform show
# serverspace_isolated_network.my_net:
resource "serverspace_isolated_network" "my_net" {
description = "Example for Terraform"
id = "l2n403"
location = "am2"
mask = 24
name = "my_net"
network_prefix = "192.168.0.0"
}
# serverspace_server.server1:
resource "serverspace_server" "server1" {
boot_volume_id = 58909
boot_volume_size = 40960
cpu = 2
id = "l2s190038"
image = "Ubuntu-20.04-X64"
location = "am2"
name = "server-1"
public_ip_addresses = [
"45.138.24.19",
]
ram = 2048
ssh_keys = [
3181,
]
nic {
bandwidth = 0
id = 59576
ip_address = "192.168.0.1"
network = "l2n403"
network_type = "Isolated"
}
nic {
bandwidth = 50
id = 59575
ip_address = "45.138.24.19"
network_type = "PublicShared"
}
volume {
id = 58910
name = "bar"
size = 20480
}
}
# serverspace_server.server2:
resource "serverspace_server" "server2" {
boot_volume_id = 58911
boot_volume_size = 40960
cpu = 4
id = "l2s190039"
image = "Ubuntu-20.04-X64"
location = "am2"
name = "server-2"
public_ip_addresses = [
"31.44.3.68",
]
ram = 8192
ssh_keys = []
nic {
bandwidth = 0
id = 59578
ip_address = "192.168.0.2"
network = "l2n403"
network_type = "Isolated"
}
nic {
bandwidth = 70
id = 59577
ip_address = "31.44.3.68"
network_type = "PublicShared"
}
}
# serverspace_ssh.terraform:
resource "serverspace_ssh" "terraform" {
id = "3181"
name = "terraform-key"
public_key = "ssh-rsa AAAAB3Nza...JUDjlM= root@CentOS.local"
}

Parabéns por sua primeira infraestrutura como uma implementação de código.