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 | |
---|
8 | from cli.objects.client import OgClient |
---|
9 | from cli.objects.scopes import OgScope |
---|
10 | from cli.objects.modes import OgModes |
---|
11 | from cli.objects.wol import OgWol |
---|
12 | from cli.objects.images import OgImage |
---|
13 | from cli.objects.disks import OgDisk |
---|
14 | from cli.objects.poweroff import OgPoweroff |
---|
15 | from cli.objects.reboot import OgReboot |
---|
16 | import argparse |
---|
17 | import requests |
---|
18 | import sys |
---|
19 | |
---|
20 | |
---|
21 | class 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 | |
---|
52 | class 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:]) |
---|