NEU: gridscale Rocket Storage NVMe basierter Storage für maximale I/O Performance und niedrige Latenzzeiten. Mehr Infos hier….

gscloud – Der offizielle CLI-Client für gridscale

Datum: 27.11.2020

gridscale gs cloud CLI Client

tl;dr – gscloud ist ein hilfreiches Tool zur Verwaltung von Servern und anderen Ressourcen unmittelbar über die Befehlszeile.

Einleitung

Wer schätzt nicht eine gut durchdachte Benutzeroberfläche, die uns hilft, alle Möglichkeiten schnell zu erfassen und die uns reibungslos durch komplexe Einstellung führt? Das gridscale Panel ist solch eine Schnittstelle, die uns bei der Einarbeitung in die Materie hilft, und es ermöglicht, Aufgaben schnell und ohne großen Lernaufwand zu erledigen. Wir arbeiten hart daran, es jeden Tag noch besser zu machen.

Wenn wir jedoch mit komplexeren Konfigurationen konfrontiert werden, ziehen es viele vor, zur Befehlszeile zurückzukehren. Stell dir vor, du schaltest dreißig Server auf einmal ab. Das wiederholte Klicken macht nicht gerade viel Spaß, oder? Abgesehen von der Langeweile von Wiederholungen möchten wir Aufgaben gerne automatisieren, die häufig ausgeführt werden müssen und die deshalb anfällig für manuelle Fehler sind. Normalerweise schreiben wir dann ein entsprechendes Skript in unserer bevorzugten Sprache. Viele von uns nutzen hier eine Kommandozeile.

Aus diesem Grund arbeiten wir an einem neuen Tool, das wir gscloud genannt haben. Es ist zwar noch lange nicht fertig, aber wir haben schon viele Fortschritte gemacht – Deshalb möchten wir dir davon berichten.

gscloud nutzt die gridscale-API und bietet dir Zugriff auf alle1 deine Objekte und Ressourcen direkt von der Befehlszeile aus. Es ist in Go geschrieben und funktioniert auf MacOS, Windows und Linux. Ich habe gehört, dass jemand bereits ein Paket für den FreeBSD-Ports-Tree erstellt hat.

Installation

Der bevorzugte Weg, gscloud zu installieren, ist im Moment, die neueste offizielle Version von GitHub zu holen. Es ist nur eine ausführbare Binärdatei. Lade dir das Zip-Archiv für deine Plattform herunter (verfügbar u.a. für Windows, Linux und MacOS) und entpacke es in deinem PATH.

$ gscloud version
Version:        v0.4.0
Git commit:     e89fd0c5e909ef69136b18652127a4fafd44e787

 

Wenn dies funktioniert, bist du startklar

Allgemeine Verwendung

Diese Anleitung verwendet gscloud unter Linux, aber es ist für MacOS und Windows sehr ähnlich.

Tippe:

$ gscloud help

 

Mit gscloud kannst du Objekte auf gridscale.io über die Befehlszeile verwalten. Es bietet eine mit Docker-CLI vergleichbare Befehlszeile, die dir das Erstellen, Manipulieren und Entfernen von Objekten auf gridscale.io erlaubt.

Usage:
  gscloud [command]

Available Commands:
  completion  Generate shell completion scripts
  help        Help about any command
  kubernetes  Operate managed Kubernetes clusters
  make-config Create a new configuration file
  manpage     Create man-pages for gscloud
  network     Operations on networks
  server      Operations on servers
  ssh-key     Operations on SSH keys
  storage     Operations on storages
  template    Operations on templates
  version     Print the version

Flags:
      --account string   Specify the account used (default "default")
      --config string    Specify a configuration file (default "~/.config/gscloud/config.yaml")
  -h, --help             Print usage
  -j, --json             Print JSON to stdout instead of a table
      --noheading        Do not print column headings
  -q, --quiet            Print only IDs of objects

Use "gscloud [command] --help" for more information about a command.

 

Hier siehst du alle verfügbaren Befehle. Beginnen wir mit der Erstellung einer Konfigurationsdatei.

$ gscloud make-config
Written: ~/.config/gscloud/config.yaml

$ cat ~/.config/gscloud/config.yaml
accounts:
- name: default
  userId: ""
  token: ""
  url: https://api.gridscale.io

 

Lass uns zum Panel wechseln. Dabei kopieren wir unsere Benutzer-ID und erstellen ein API-Token, das du sofort ausfüllen kannst. Danach können wir dieses Token verwenden, um mit allen Objekten innerhalb des entsprechenden Projekts zu interagieren2. Du kannst in der Konfigurationsdatei mehrere Konten angeben. Verwende den Namen in der Konfiguration, um das Projekt zu identifizieren, zu dem das Token gehört.

Nehmen wir an, wir haben zwei getrennte Projekte, `dm` und `dm-staging`, die wie folgt aussehen könnten

$ cat ~/.config/gscloud/config.yaml
accounts:
- name: dm
  userId: 3737b9ab-65ff-4d1e-af5e-d08d683bd1fa
  token: ec83ea6e8ce4739d62421fc062acf9e90777608a938eae34203aa52d9ddc72b7
  url: https://api.gridscale.io

- name: dm-staging
  userId: 3737b9ab-65ff-4d1e-af5e-d08d683bd1fa
  token: fc5a2557e3009d48ed7a031b1dee4630a0e1d84d19b646de712a1dbc71fc6045
  url: https://api.gridscale.io

$ gscloud --account=dm server ls
ID                                    NAME  CORE  MEM  CHANGETIME                 POWER
1c8e481e-b930-4fca-9c30-77b5a6da6412  dm-1  1     2    2020-09-06T20:44:26+02:00  on
4698ae6e-96ad-4214-8fc0-7407d7e8b3f8  dm-2  4     8    2020-09-06T20:44:24+02:00  on
d0d8a330-2a3c-4b65-b159-c9915e00fced  dm-3  4     8    2020-09-06T20:45:21+02:00  off

$ gscloud --account=dm-staging server ls
ID  NAME  CORE  MEM  CHANGETIME  POWER

 

Mit `gscloud server ls` listen wir alle Server-Objekte. Offensichtlich haben wir eine Reihe von Servern in `dm`, aber bisher nichts in `dm-staging`. Bevor einige zu erstellen, sollten wir uns notieren, wie Befehle gegeben werden. Die meisten Befehle haben die folgende Form:

$ gscloud server ls
$ gscloud server rm 
$ gscloud server create --name whatever

 

Du siehst, dass Befehle `gscloud` sind. Mit dieser kleinen Gedächtnisstütze sollte es einfach genug sein, sich die verschiedenen Befehle zu merken.

Erstellen und Löschen von Servern

Das Entfernen eines Servers ist einfach. Gib ihm einfach die ID.

$ gscloud --account=dm server ls
ID                                    NAME  CORE  MEM  CHANGETIME                 POWER
4698ae6e-96ad-4214-8fc0-7407d7e8b3f8  dm-2  4     8    2020-09-06T20:44:24+02:00  on
d0d8a330-2a3c-4b65-b159-c9915e00fced  dm-3  4     8    2020-09-06T20:45:21+02:00  off
1c8e481e-b930-4fca-9c30-77b5a6da6412  dm-1  1     2    2020-09-06T20:44:26+02:00  on

 

Los geht’s:

gridscale/gscloud $ gscloud --account=dm server rm d0d8a330-2a3c-4b65-b159-c9915e00fced

 

Kurz überprüfen:

gridscale/gscloud $ gscloud --account=dm server ls
ID                                    NAME  CORE  MEM  CHANGETIME                 POWER
4698ae6e-96ad-4214-8fc0-7407d7e8b3f8  dm-2  4     8    2020-09-06T20:44:24+02:00  on
1c8e481e-b930-4fca-9c30-77b5a6da6412  dm-1  1     2    2020-09-06T20:44:26+02:00  on

 

Et voilà. Weg ist er.

Es gibt auch ein `-quiet‘-Flag, das alles unterdrückt und dir nur Objekt-IDs gibt.

$ gscloud --account=dm server ls --quiet
4698ae6e-96ad-4214-8fc0-7407d7e8b3f8
1c8e481e-b930-4fca-9c30-77b5a6da6412

 

Du kannst dies verwenden, um z.B. schnell eine Reihe von Servern in einer Schleife abzuschalten:

$ gscloud server ls --quiet | while read s; do
 ./gscloud server off --force $s
done

 

Du kannst sie auf diese Weise natürlich auch zusammen mit ihren Speichern löschen. Aber lass uns einen neuen Server erstellen. (Das ist auch viel konstruktiver.)

$ gscloud server --account=dm create \
  --cores 1 \
  --mem 1 \
  --name test-1 \
  --with-template "CentOS 8 (x86_64)" \
  --storage-size 15 \
  --hostname test-1 \
  --password secret123
Server created: 9f1376ad-c721-4eb0-8734-791af4a66102
Storage created: 4038e0ba-73c5-4a2e-b2a1-16c3a6433984

 

Beachte, dass dadurch ein Speicher mit dem Server-Objekt erzeugt wird. Du kannst auch zuerst einen Speicher anlegen und ihn an ein neues Server-Objekt anhängen. Mittlerweile sollte `dm` wie folgt aussehen:

$ gscloud --account=dm server ls
ID                                    NAME    CORE  MEM  CHANGETIME                 POWER
1c8e481e-b930-4fca-9c30-77b5a6da6412  dm-1    1     2    2020-09-06T20:44:26+02:00  on
9f1376ad-c721-4eb0-8734-791af4a66102  test-1  1     1    2020-09-09T17:45:10+02:00  off

 

MIT JSON MEHR MACHEN

Mit einer Unix-Kommandozeile und der üblichen tabellenorientierten Ausgabe, die dir gscloud auf stdout gibt, solltet du in der Lage sein, schnell ein paar einfache Zeilen mit `sed(1)`, `awk(1)`, `grep(1)` und ähnlichen Programmen zu hacken. Wahrscheinlich benutzt du sie bereits, um die gewünschten Daten zu extrahieren und wo anders einzuspeisen.

Eine weitere Alternative, die ich dir zeigen möchte, ist die Verwendung von gscloud mit dem `-json`-Flag und die Kombination mit `jq(1)`. jq ist ein JSON-Prozessor für die Kommandozeile3. Aber lass es uns ausprobieren. Wir tippen:

$ gscloud --account=dm server ls --json | jq

 

Mit den Änderungen, die wir oben am `dm‘-Projekt vorgenommen haben, sollten wir jetzt so etwas sehen:

json
[
  {
    "server": {
      "object_uuid": "1c8e481e-b930-4fca-9c30-77b5a6da6412",
      "name": "dm-1",
      "memory": 2,
      "cores": 1,
      "hardware_profile": "q35",
      "status": "active",
      "location_uuid": "8328a5bc-e66e-4edc-8aae-2e2bf07fdb28",
      "power": true,
      "current_price": 2.03693,
      "availability_zone": "",
      "auto_recovery": true,
      "legacy": false,
      "console_token": "13f53ff5a05b85df722ac6bc60a94d620554f876cd91acfb7c048eda2fd55839bf5752cd67d263ca8e3215d630863af2",
      "usage_in_minutes_memory": 8314,
      "usage_in_minutes_cores": 4157,
      "labels": [],
      "relations": {
        "isoimages": [],
        "networks": [],
        "public_ips": [],
        "storages": [
          {
            "object_uuid": "d55d4e80-ba89-4c6c-be70-8c68fb979516",
            "object_name": "dm-1",
            "capacity": 10,
            "storage_type": "storage",
            "target": 0,
            "lun": 0,
            "controller": 0,
            "create_time": "2020-09-06T18:42:02Z",
            "bootdevice": true,
            "bus": 0,
            "last_used_template": "8d1bb5dc-7c37-4c90-8529-d2aaac75d812",
            "license_product_no": 0,
            "server_uuid": ""
          }
        ]
      },
      "create_time": "2020-09-06T18:42:02Z",
      "change_time": "2020-09-06T18:44:26Z"
    }
  },
  {
    "server": {
      "object_uuid": "9f1376ad-c721-4eb0-8734-791af4a66102",
      "name": "test-1",
      "memory": 1,
      "cores": 1,
      "hardware_profile": "default",
      "status": "active",
      "location_uuid": "8328a5bc-e66e-4edc-8aae-2e2bf07fdb28",
      "power": false,
      "current_price": 0,
      "availability_zone": "",
      "auto_recovery": true,
      "legacy": false,
      "console_token": "0bd94037291bde961dbee58c15ff7b4df4b9bd0759435cb7955db1f0e335d15ec6fbfdd6813ae52d5f0fa9406c767c23",
      "usage_in_minutes_memory": 0,
      "usage_in_minutes_cores": 0,
      "labels": [],
      "relations": {
        "isoimages": [],
        "networks": [],
        "public_ips": [],
        "storages": [
          {
            "object_uuid": "4038e0ba-73c5-4a2e-b2a1-16c3a6433984",
            "object_name": "test-1",
            "capacity": 15,
            "storage_type": "storage",
            "target": 0,
            "lun": 0,
            "controller": 0,
            "create_time": "2020-09-09T15:45:28Z",
            "bootdevice": true,
            "bus": 0,
            "last_used_template": "8d1bb5dc-7c37-4c90-8529-d2aaac75d812",
            "license_product_no": 0,
            "server_uuid": ""
          }
        ]
      },
      "create_time": "2020-09-09T15:45:10Z",
      "change_time": "2020-09-09T15:45:10Z"
    }
  }
]

 

Dadurch erhalten wir nicht nur eine schöne Syntaxhervorhebung, sondern standardmäßig auch viel mehr Informationen. Beachte, dass die Informationen strukturierter sind. Mit jq kannst du richtig abgehen und einige starke Ausdrücke erzeugen.

$ gscloud --account=dm server ls --json \
    | jq -c '.[] | .server | select( .memory > 1 ) | { id: .object_uuid, name: .name, on: .power }'
{"id":"1c8e481e-b930-4fca-9c30-77b5a6da6412","name":"dm-1","on":true}

 

Was bewirkt dies? Es wählt alle Server in `dm` aus, die derzeit mehr als ein Gigabyte Speicher haben, und konstruiert für jeden von ihnen ein neues JSON-Objekt mit der ID, dem Namen und dem Power Status des Servers und gibt es an stdout aus. Wie auch immer, du verstehst was ich meine. Total verrückt, aber unglaublich nützlich. (Stell dir vor, du sortierst Ressourcen nach `“aktuellem_Preis“`, um festzustellen, was die meisten Kosten verursacht).

Was zukünftig zu erwarten ist

Wir werden weiterhin Funktionen zur gscloud hinzufügen. Das Ziel ist es, dir zu ermöglichen, alles, was du innerhalb des Panels tun kannst, direkt von deiner Befehlszeile aus zu tun, sei es die cmd.exe von Windows oder PowerShell, oder unter Linux, auf einem der BSDs oder auf einem MacOS.

Wir hoffen, dir damit eine wertvolle neue Möglichkeit zu bieten, mit deinen Ressourcen bei gridscale zu arbeiten während wir gleichzeitig unser Panel, den Terraform-Provider und unsere Client-Bibliotheken ergänzen, um dir die Interaktion mit der gridscale-API aus deinen Programmen heraus zu erleichtern.

Viel Spaß damit!

Fußnoten

1 Nun, noch nicht ganz, aber bald.

2 Denke daran, API-Token sind an Projekte gebunden. Wenn wir also ein Token verwenden, können wir keine Objekte in anderen Projekten entfernen oder ändern.

3 jq ist hier verfügbar. Wenn du es noch nicht installiert hast, sind die Chancen hoch, dass ein `brew install jq` oder `sudo dnf install jq` alles ist, was du tun musst.

Zurück zur Übersicht