regructl/main.py

131 lines
3.9 KiB
Python
Raw Permalink Normal View History

2022-03-27 20:12:52 +03:00
#!/usr/bin/python3
import json
import configparser
import requests
import typer
import os
2022-07-10 03:21:07 +03:00
import prettytable
2022-03-27 20:12:52 +03:00
app = typer.Typer()
2022-07-10 03:21:07 +03:00
server_app = typer.Typer()
app.add_typer(server_app, name='server')
info_submenu = typer.Typer()
app.add_typer(info_submenu, name='info')
2022-03-27 20:12:52 +03:00
class Servers:
@staticmethod
def list():
response = requests.get("https://api.cloudvps.reg.ru/v1/reglets", headers=reqHeader)
return response.json()
@staticmethod
def get_systems():
response = requests.get("https://api.cloudvps.reg.ru/v1/images?type=distribution", headers=reqHeader)
return response.json()
@staticmethod
def create(name, tariff, image):
2022-07-10 03:21:07 +03:00
response = requests.post(
"https://api.cloudvps.reg.ru/v1/reglets",
headers=reqHeader,
json={
"name": name,
"size": tariff,
"image": image
}
)
2022-03-27 20:12:52 +03:00
return response.json()
2022-07-10 03:21:07 +03:00
@staticmethod
def start(name):
endpoint = 'https://api.cloudvps.reg.ru/v1/reglets/{id}/actions'
data = {"type": "start"}
list_of_servers = Servers.list()
for i in list_of_servers['reglets']:
if i['name'] == name:
result = requests.post(endpoint.format(id=i['id']), headers=reqHeader, json=data)
return result.json()
return None
2022-03-28 01:37:58 +03:00
@staticmethod
def stop(name):
endpoint = 'https://api.cloudvps.reg.ru/v1/reglets/{id}/actions'
data = {"type": "stop"}
list_of_servers = Servers.list()
for i in list_of_servers['reglets']:
if i['name'] == name:
result = requests.post(endpoint.format(id=i['id']), headers=reqHeader, json=data)
return result.json()
return None
2022-03-27 20:12:52 +03:00
def get_balance():
response = requests.get("https://api.cloudvps.reg.ru/v1/balance_data", headers=reqHeader)
return response.json()
2022-07-10 03:21:07 +03:00
@info_submenu.command()
2022-03-28 01:37:58 +03:00
def list_plans():
2022-03-27 20:12:52 +03:00
response = requests.get("https://api.cloudvps.reg.ru/v1/prices", headers=reqHeader)
2022-03-27 23:36:21 +03:00
print('{0:17} {1:5} {2:5} {3:6}'.format('name', 'hour', 'month', 'unit'))
for i in response.json()['prices']:
if i['type'] == 'reglet':
print('{0:17} {1:5} {2:5} {3:6}'.format(i['plan'], i['price'], i['price_month'], i['unit']))
2022-03-27 20:12:52 +03:00
2022-07-10 03:21:07 +03:00
@info_submenu.command()
def list_os():
systems_list = Servers.get_systems()['images']
for i in systems_list:
print(i['slug'])
2022-03-27 20:12:52 +03:00
@app.command()
def balance():
print(get_balance())
2022-07-10 03:21:07 +03:00
@server_app.command("list")
2022-03-28 01:37:58 +03:00
def servers_list():
2022-03-27 22:39:58 +03:00
list_of_servers = Servers.list()
print('{0:7} {1:17} {2:2} {3:5} {4:4}'.format('state', 'name', 'vcpus', 'memory', 'disk'))
for i in list_of_servers['reglets']:
if i['status'] == 'active':
state = typer.style("Running", fg=typer.colors.GREEN)
else:
state = typer.style('Stopped', fg=typer.colors.RED)
print('{0:15} {1:20} {2:2} {3:5} {4:4}'.format(state, i['name'], i['vcpus'], i['memory'], i['disk']))
2022-03-27 20:12:52 +03:00
2022-07-10 03:21:07 +03:00
@server_app.command("create")
2022-03-28 01:37:58 +03:00
def servers_create(name: str = typer.Option(...), tariff: str = typer.Option(...), image: str = typer.Option(...)):
2022-03-27 20:12:52 +03:00
print(Servers.create(name=name, tariff=tariff, image=image))
2022-07-10 03:21:07 +03:00
@server_app.command("stop")
2022-03-28 01:37:58 +03:00
def servers_stop(name: str = typer.Option(...)):
print(Servers.stop(name=name))
2022-03-27 20:12:52 +03:00
def get_api_key():
config = configparser.ConfigParser()
2022-03-27 22:39:58 +03:00
config.read(os.path.join(os.getenv('HOME'), '.config', 'regructl.ini'))
2022-03-27 20:12:52 +03:00
result = config.get('api', 'key', fallback=None)
if result is None:
result = input("Enter API Key ")
config.add_section('api')
config.set('api', 'key', result)
2022-03-27 22:39:58 +03:00
with open(os.path.join(os.getenv('HOME'), '.config', 'regructl.ini'), 'w') as configfile:
2022-03-27 20:12:52 +03:00
config.write(configfile)
return result
if __name__ == '__main__':
apikey = get_api_key()
reqHeader = {"Authorization": "Bearer " + apikey}
app()