UNPKG

@gridscale/api

Version:
175 lines (140 loc) 5.6 kB
var process = require('process'); var colors = require('colors'); var gridscale = require('@gridscale/api').gridscale; var client; /** * creates the client and fires sample requests * @param _token string - the API Token * @param _user_uuid string - the User-UUID to which the token belongs */ function createClient(_token, _user_uuid) { client = new gridscale.Client(_token, _user_uuid); listServers(["power=false"], "Stopped Servers:"); listServers(["power=true"], "Running Servers:"); listStorages("Storages:"); } /** * fetches the servers with given filters and outputs a list * @param _filters string[] - optional filters for the request. field + operator + testValue * @param _headline string - optional headline to display */ function listServers(_filters = [], _headline = "") { client.Server.list({ page: 0, limit : 10, sort: "name", fields: ["name","object_uuid","power"], filter: _filters }).then((_request) => { // request was successful output(_headline, 'bold'); for (var x in _request.result.servers) { if (_request.result.servers.hasOwnProperty(x)) { let _server = _request.result.servers[x]; output(_server.object_uuid + ": " + _server.name, _server.power ? 'green': 'red'); } } }). catch((_error) => { // handle the error output("An error occured", 'bgRed'); if (_error.name == 'GridscaleError' && _error.result && _error.result.response) { output(_error.message + ": " + _error.result.response.status + " - " + _error.result.response.statusText, 'red'); } else { output("Unknown error " + _error.message); } }); } /** * fetches the servers with given filters and outputs a list * @param _filters string[] - optional filters for the request. field + operator + testValue * @param _headline string - optional headline to display */ function listStorages(_headline = "") { client.Storage.list({ page: 0, limit : 10, sort: "name", fields: ["name","object_uuid"] }).then((_request) => { // request was successful output(_headline, 'bold'); for (var x in _request.result.storages) { if (_request.result.storages.hasOwnProperty(x)) { let _storage = _request.result.storages[x]; output(_storage.object_uuid + ": " + _storage.name, 'yellow'); } } }). catch((_error) => { // handle the error output("An error occured", 'bgRed'); if (_error.name == 'GridscaleError' && _error.result && _error.result.response) { output(_error.message + ": " + _error.result.response.status + " - " + _error.result.response.statusText, 'red'); } else { output("Unknown error " + _error.message); } }); } /** * outputs text with colors in browser or in console for node * @param txt string * @param color string */ function output(txt = "", color = "white") { if (typeof(document) !== 'undefined' && document.body) { var div = document.createElement('div'); div.textContent = txt; if (color.indexOf('bg') === 0) div.style.backgroundColor = color.substr(2).toLowerCase(); else if (['bold'].indexOf(color) >= 0) div.style.fontWeight = color; else div.style.color = color; document.body.appendChild(div); } else { console.log(colors[color](txt)); } } // ask for credentials if (typeof(document) !== 'undefined' && document.body) { // for browser ... var intro = document.createElement('p'); intro.innerHTML = 'Welcome to the gridscale API client example! You will now be asked for an API-Token and an User-UUID. Please log in to the gridscale panel (<a href="https://my.gridscale.io" target="_blank">https://my.gridscale.io</a>) and navigate to the "API-Keys" section to generate one. Read access es enough. The User-UUID is also displayed here.'; intro.setAttribute('class', 'intro'); document.body.appendChild(intro); var form = document.createElement('form'); var inputToken = document.createElement('input'); inputToken.setAttribute('name', 'token'); inputToken.setAttribute('placeholder', 'API-Token'); inputToken.setAttribute('required', true); var inputUser = document.createElement('input'); inputUser.setAttribute('name', 'user'); inputUser.setAttribute('placeholder', 'User-UUID'); inputUser.setAttribute('required', true); var button = document.createElement('input'); button.setAttribute('type', 'submit'); button.setAttribute('value', 'Start request'); form.appendChild(inputToken); form.appendChild(inputUser); form.appendChild(button); document.body.appendChild(form); form.onsubmit = function(e) { e.preventDefault(); var p = document.createElement('p'); p.textContent = "Fetching server list"; document.body.appendChild(p); createClient(inputToken.value.trim(), inputUser.value.trim()); } } else { // for node const readline = require('readline').createInterface({ input: process.stdin, output: process.stdout }); output('Welcome to the gridscale API client example! You will now be asked for an API-Token and an User-UUID. Please log in to the gridscale panel (https://my.gridscale.io) and navigate to the "API-Keys" section to generate one. Read access es enough. The User-UUID is also displayed here."', 'cyan'); output(); readline.question('Please enter an API-Token: ', (_token) => { readline.question('Please enter the User-UUID: ', (_uuid) => { readline.close(); createClient(_token.trim(), _uuid.trim()); }); }); }