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
RevLine 
[5f92257]1# Copyright (C) 2020-2021 Soleta Networks <info@soleta.eu>
[14b7729]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
[5f92257]5# Free Software Foundation; either version 3 of the License, or
6# (at your option) any later version.
[14b7729]7
[dbf0f00]8from cli.objects.client import OgClient
9from cli.objects.scopes import OgScope
10from cli.objects.modes import OgModes
[0f55ce7]11from cli.objects.wol import OgWol
[5abe862]12from cli.objects.images import OgImage
[4dfb90c]13from cli.objects.disks import OgDisk
[19e7d98]14from cli.objects.poweroff import OgPoweroff
[2f824d8]15from cli.objects.reboot import OgReboot
[dbdfc10]16import argparse
[2120ef6]17import requests
[dbdfc10]18import sys
[2120ef6]19
[d90ab82]20
[dbdfc10]21class OgREST():
[d90ab82]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
[4dddd35]51
[dbdfc10]52class OgCLI():
[d90ab82]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):
[2f824d8]88        choices = ['reboot', 'refresh', 'poweroff', 'wol']
[d90ab82]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:])
[2f824d8]99        elif parsed_args.send_obj == 'reboot':
100            OgReboot.send_reboot(self.rest, args[1:])
[d90ab82]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.