ScalewayApi
ScalewayApi — client Crystal pur (stdlib uniquement) pour l'API Scaleway REST v1.
Couvre le strict nécessaire au provisioning Elastic Metal :
client.ssh_keys— lister / créer / supprimer les clés SSH IAM.client.baremetal.offers— catalogue Elastic Metal (EM-A115X-SSD, etc.).client.baremetal.oses— templates d'OS (Debian 13, Ubuntu 24.04…).client.baremetal.servers— création + installation en un appel, réinstallation, mise à jour (nom, reverse), suivi par événements.client.domain.records— gestion des records DNS d'une zone (A/AAAA/CNAME/MX…), changesets, idempotent.
require "scaleway-api"
client = ScalewayApi::Client.new(
secret_key: ENV["SCW_SECRET_KEY"],
default_project_id: ENV["SCW_DEFAULT_PROJECT_ID"],
default_zone: "fr-par-2",
)
key = client.ssh_keys.create(name: "laptop", public_key: "ssh-ed25519 AAAA...")
os = client.baremetal.oses.find_by_name_prefix("debian").not_nil!
offer = client.baremetal.offers.list.first
server = client.baremetal.servers.create(
offer_id: offer.id,
install: ScalewayApi::Endpoints::Baremetal::Install.new(
os_id: os.id,
hostname: "web01.aloli.fr",
ssh_key_ids: [key.id],
),
reverse: "web01.aloli.fr",
)
loop do
events = client.baremetal.servers.events(server_id: server.id)
break if events.any? { |e| e.action == "install_server" && e.success? }
sleep 30.seconds
end
Constants
BASE_URL = "https://api.scaleway.com"
URL de base de l'API Scaleway (unique, contrairement à OVH qui
distingue eu/ca/us). La zone fait partie du chemin (/zones/{zone}/...),
pas du hostname.
DEFAULT_ZONE = "fr-par-2"
Zone par défaut si ni le client ni l'appel ne la précisent.
VERSION = {{
(((read_file("/tmp/tmp.kmBOlm/src/src/scaleway_api/../../shard.yml"))
.lines
.find(&.starts_with?("version:")) || "version: 0.0.0")
.gsub(/^version:\s*/, ""))
.chomp
}}
Lue au compile-time depuis shard.yml via le macro read_file.
Cf. note mémoire feedback_shard_version_macro.md (mémoire ALOLI).
ZONES = ["fr-par-1", "fr-par-2", "fr-par-3", "nl-ams-1", "nl-ams-2", "nl-ams-3", "pl-waw-1", "pl-waw-2", "pl-waw-3"] of ::String
Zones supportées au moment de l'écriture. Cette liste est purement
indicative : le client accepte n'importe quelle chaîne pour zone,
ce qui évite à ce shard de devoir être maintenu au rythme des
ouvertures de nouveaux datacenters Scaleway.