source: ogCli-Git/cli/cli.py

Last change on this file was 2f824d8, checked in by Jose M. Guisado <jguisado@…>, 2 years ago

send: add send reboot

Takes usual client options
(--client-ip, --room-id, --center-id)

Example:

ogcli send reboot --client-ip 192.168.56.11

  • Property mode set to 100644
File size: 4.7 KB
Line 
1# Copyright (C) 2020-2021 Soleta Networks <info@soleta.eu>
2#
3# This program is free software: you can redistribute it and/or modify it under
4# the terms of the GNU Affero General Public License as published by the
5# Free Software Foundation; either version 3 of the License, or
6# (at your option) any later version.
7
8from cli.objects.client import OgClient
9from cli.objects.scopes import OgScope
10from cli.objects.modes import OgModes
11from cli.objects.wol import OgWol
12from cli.objects.images import OgImage
13from cli.objects.disks import OgDisk
14from cli.objects.poweroff import OgPoweroff
15from cli.objects.reboot import OgReboot
16import argparse
17import requests
18import sys
19
20
21class OgREST():
22    def __init__(self, ip, port, api_token):
23        self.URL = f'http://{ip}:{port}'
24        self.HEADERS = {'Authorization': api_token}
25
26    def get(self, path, payload=None):
27        try:
28            r = requests.get(f'{self.URL}{path}',
29                             headers=self.HEADERS,
30                             json=payload)
31            if r.status_code != 200:
32                sys.exit(f"Cannot connect to ogServer: "
33                         f"{r.status_code} HTTP status code")
34        except IOError as e:
35            sys.exit(f"Cannot connect to ogServer: {e}")
36        return r
37
38    def post(self, path, payload):
39        try:
40            r = requests.post(f'{self.URL}{path}',
41                              headers=self.HEADERS,
42                              json=payload)
43            print(r.text)
44            if r.status_code not in {200, 202}:
45                sys.exit(f"Cannot connect to ogServer: "
46                         f"{r.status_code} HTTP status code")
47        except IOError as e:
48            sys.exit(f"Cannot connect to ogServer: {e}")
49        return r
50
51
52class OgCLI():
53    def __init__(self, cfg):
54        self.rest = OgREST(cfg['ip'], cfg['port'], cfg['api_token'])
55
56    def list(self, args):
57        choices = ['clients', 'scopes', 'modes', 'hardware',
58                   'client', 'images', 'disks']
59        parser = argparse.ArgumentParser(prog='ogcli list')
60        parser.add_argument('item', choices=choices)
61        parsed_args = parser.parse_args([args[0]])
62
63        if parsed_args.item == 'clients':
64            OgClient.list_clients(self.rest)
65        elif parsed_args.item == 'client':
66            OgClient.get_client_properties(self.rest, args[1:])
67        elif parsed_args.item == 'hardware':
68            OgClient.list_client_hardware(self.rest, args[1:])
69        elif parsed_args.item == 'modes':
70            OgModes.list_available_modes(self.rest)
71        elif parsed_args.item == 'scopes':
72            OgScope.list_scopes(self.rest)
73        elif parsed_args.item == 'images':
74            OgImage.list_images(self.rest)
75        elif parsed_args.item == 'disks':
76            OgDisk.list_disks(self.rest, args[1:])
77
78    def set(self, args):
79        choices = ['modes', 'mode']
80        parser = argparse.ArgumentParser(prog='ogcli set')
81        parser.add_argument('item', choices=choices)
82        parsed_args = parser.parse_args([args[0]])
83
84        if parsed_args.item in choices:
85            OgModes.set_modes(self.rest, args[1:])
86
87    def send(self, args):
88        choices = ['reboot', 'refresh', 'poweroff', 'wol']
89        parser = argparse.ArgumentParser(prog='ogcli send')
90        parser.add_argument('send_obj', choices=choices)
91        parsed_args = parser.parse_args([args[0]])
92
93        if parsed_args.send_obj == 'wol':
94            OgWol.send_wol(self.rest, args[1:])
95        elif parsed_args.send_obj == 'poweroff':
96            OgPoweroff.send_poweroff(self.rest, args[1:])
97        elif parsed_args.send_obj == 'refresh':
98            OgClient.send_refresh(self.rest, args[1:])
99        elif parsed_args.send_obj == 'reboot':
100            OgReboot.send_reboot(self.rest, args[1:])
101
102    def restore(self, args):
103        choices = ['image']
104        parser = argparse.ArgumentParser(prog='ogcli restore')
105        parser.add_argument('send_obj', choices=choices)
106        parsed_args = parser.parse_args([args[0]])
107
108        if parsed_args.send_obj == 'image':
109            OgImage.restore_image(self.rest, args[1:])
110
111    def create(self, args):
112        choices = ['image']
113        parser = argparse.ArgumentParser(prog='ogcli create')
114        parser.add_argument('create_obj', choices=choices)
115        parsed_args = parser.parse_args([args[0]])
116
117        if parsed_args.create_obj == 'image':
118            OgImage.create_image(self.rest, args[1:])
119
120    def setup(self, args):
121        choices = ['disk']
122        parser = argparse.ArgumentParser(prog='ogcli setup')
123        parser.add_argument('setup_obj', choices=choices)
124        parsed_args = parser.parse_args([args[0]])
125
126        if parsed_args.setup_obj == 'disk':
127            OgDisk.setup_disk(self.rest, args[1:])
Note: See TracBrowser for help on using the repository browser.