Add 'list disks'

Enables consuming /client/setup API from ogServer in order to fetch
partition and disk setup information from a given client.

Example, if pc11 is a client with 1 disk, 4 part (1:linux,2-3:empty,4:cache):

ogcli list disk --client-ip 192.168.56.11

{
  "partitions": [
    {
      "disk": 1,
      "partition": 0,
      "code": 1,
      "size": 52428800,
      "used_size": 0,
      "filesystem": 0,
      "os": 0,
      "image": 0,
      "software": 0
    },
    {
      "disk": 1,
      "partition": 1,
      "code": 131,
      "size": 40000000,
      "used_size": 4,
      "filesystem": 6,
      "os": 8,
      "image": 0,
      "software": 0
    },
    {
      "disk": 1,
      "partition": 2,
      "code": 0,
      "size": 0,
      "used_size": 0,
      "filesystem": 1,
      "os": 0,
      "image": 0,
      "software": 0
    },
    {
      "disk": 1,
      "partition": 3,
      "code": 0,
      "size": 0,
      "used_size": 0,
      "filesystem": 1,
      "os": 0,
      "image": 0,
      "software": 0
    },
    {
      "disk": 1,
      "partition": 4,
      "code": 202,
      "size": 10000000,
      "used_size": 1,
      "filesystem": 2,
      "os": 0,
      "image": 0,
      "software": 0
    }
  ]
}
master
Jose M. Guisado 2021-04-06 11:17:51 +02:00 committed by OpenGnSys Support Team
parent c417964179
commit 4dfb90cf56
2 changed files with 28 additions and 1 deletions

View File

@ -11,6 +11,7 @@ from cli.objects.scopes import OgScope
from cli.objects.modes import OgModes from cli.objects.modes import OgModes
from cli.objects.wol import OgWol from cli.objects.wol import OgWol
from cli.objects.images import OgImage from cli.objects.images import OgImage
from cli.objects.disks import OgDisk
import argparse import argparse
import requests import requests
import sys import sys
@ -51,7 +52,7 @@ class OgCLI():
def list(self, args): def list(self, args):
choices = ['clients', 'scopes', 'modes', 'hardware', choices = ['clients', 'scopes', 'modes', 'hardware',
'client', 'images'] 'client', 'images', 'disks']
parser = argparse.ArgumentParser(prog='ogcli list') parser = argparse.ArgumentParser(prog='ogcli list')
parser.add_argument('item', choices=choices) parser.add_argument('item', choices=choices)
parsed_args = parser.parse_args([args[0]]) parsed_args = parser.parse_args([args[0]])
@ -68,6 +69,8 @@ class OgCLI():
OgScope.list_scopes(self.rest) OgScope.list_scopes(self.rest)
elif parsed_args.item == 'images': elif parsed_args.item == 'images':
OgImage.list_images(self.rest) OgImage.list_images(self.rest)
elif parsed_args.item == 'disks':
OgDisk.list_disks(self.rest, args[1:])
def set(self, args): def set(self, args):
choices = ['modes'] choices = ['modes']

View File

@ -0,0 +1,24 @@
#
# Copyright (C) 2021 Soleta Networks <info@soleta.eu>
#
# This program is free software: you can redistribute it and/or modify it under
# the terms of the GNU Affero General Public License as published by the
# Free Software Foundation, version 3.
#
import argparse
class OgDisk():
@staticmethod
def list_disks(rest, args):
parser = argparse.ArgumentParser()
parser.add_argument('--client-ip',
nargs='?',
required=True,
help='Client IP to query')
parsed_args = parser.parse_args(args)
payload = {'client': [parsed_args.client_ip]}
r = rest.get('/client/setup', payload=payload)
print(r.text)