Compare commits

...

4 Commits

Author SHA1 Message Date
aea65450b9 Added os list 2022-07-25 02:14:41 +03:00
975dab4bc5 Added plan list 2022-07-25 01:57:10 +03:00
1436a8d777 Added vds creation 2022-07-22 17:56:25 +03:00
9cb19cf4b5 Minor 2022-07-22 17:12:18 +03:00

View File

@@ -16,19 +16,26 @@ from time import sleep
app = typer.Typer() app = typer.Typer()
# twvdscli dbs
dbs_app = typer.Typer() dbs_app = typer.Typer()
app.add_typer(dbs_app, name='dbs', help='Control Managed databases') app.add_typer(dbs_app, name='dbs', help='Control Managed databases')
# twvdscli vds
servers_app = typer.Typer() servers_app = typer.Typer()
app.add_typer(servers_app, name='vds', help='Control VDS Servers, their snapshots and backups') app.add_typer(servers_app, name='vds', help='Control VDS Servers, their snapshots and backups')
# twvdscli vds backups
backups_app = typer.Typer() backups_app = typer.Typer()
servers_app.add_typer(backups_app, name='backup', help='Create/Delete backup') servers_app.add_typer(backups_app, name='backup', help='Create/Delete backup')
# twvdscli vds snap
snapshot_app = typer.Typer() snapshot_app = typer.Typer()
servers_app.add_typer(snapshot_app, name='snap', help='Create/Rollback/Delete snapshot') servers_app.add_typer(snapshot_app, name='snap', help='Create/Rollback/Delete snapshot')
# twvdscli vds info
vds_info_app = typer.Typer()
servers_app.add_typer(vds_info_app, name='info', help='Get info about plans and os\'es')
class Dbaas: class Dbaas:
""" """
@@ -495,49 +502,138 @@ def dbs_connect(db_id: Optional[int] = typer.Argument(None)):
os.system(cmd_psql.format(ip=db_ip, login=db_user)) os.system(cmd_psql.format(ip=db_ip, login=db_user))
@vds_info_app.command("plans")
def vds_plans(raw: bool = typer.Option(False, help="Get result as raw json"),
sort_by: str = typer.Option(None, help="sort results by value/cpu/ram/disk")):
uri = "https://public-api.timeweb.com/api/v1/presets"
result = requests.get(uri, headers=reqHeader)
if not result.ok:
print('Error')
sys.exit(1)
# If raw - print raw result and exit
if raw:
print(result.text)
sys.exit(0)
# else print pretty
x = PrettyTable()
x.field_names = ['id', 'cpus', 'ram', 'disk', 'value', 'name', 'description']
result = result.json()
print("Total: "+ str(result['meta']['total']))
# result = result
for i in result['presets']:
x.add_row([
i['id'],
i['cpu'],
i['ram'],
i['drive'],
i['discount_value'],
i['name'],
i['description']
])
if sort_by in ('cpus', 'ram', 'disk', 'value'):
x.sortby = sort_by
elif not sort_by is None:
print("No such sort")
print(x)
@vds_info_app.command("os")
def vds_oses(raw: bool = typer.Option(False, help="Get result as raw json")):
uri = "https://public-api.timeweb.com/api/v1/os"
result = requests.get(uri, headers=reqHeader)
if not result.ok:
print('Error')
sys.exit(1)
# If raw - print raw result and exit
if raw:
print(result.text)
sys.exit(0)
# else print pretty
x = PrettyTable()
x.field_names = ['id', 'fullname', 'family', 'name', 'latin', 'available']
result = result.json()
print("Total: "+ str(result['meta']['total']))
# result = result
for i in result['os']:
x.add_row([
i['id'],
i['os_caption'],
i['os_type'],
i['os_name'],
i['os_latin'],
i['is_public']
])
print(x)
@servers_app.command("create") @servers_app.command("create")
def vds_create( def vds_create(
name: str = typer.Option(..., help="VDS Name"), name: str = typer.Option(..., help="VDS Name"),
os: int = typer.Option(..., help="OS ID"), os_id: int = typer.Option(..., help="OS ID"),
preset: int = typer.Option(17, help="OS ID"), preset: int = typer.Option(17, help="Preset ID"),
comment: str = typer.Option("", help="Comment") comment: str = typer.Option("", help="Comment")
): ):
# get user group
group_uri = "https://public-api.timeweb.com/api/v1/accounts/{user}/group"
# get username from saved base64
config = configparser.ConfigParser()
config.read(os.path.join(os.getenv('HOME'), '.config', 'twvdscli.ini'))
based = config.get('api', 'key', fallback=None)
based = base64.b64decode(based)
based = str(based, 'utf-8')
user = based.split(':')[0]
group_id = requests.get(
group_uri.format(user=user), headers=reqHeader
)
# finally get group id
if group_id.ok:
group_id = group_id.json()['groups'][0]['id']
data = { data = {
"server": { "server": {
"configuration": { "configuration": {
"caption": name, "caption": name,
# "disk_size": 5, # dont give a fuck # "disk_size": 5, # dont give a fuck
# "network_bandwidth": 100, # dont give a fuck # "network_bandwidth": 100, # dont give a fuck
"os": os, # 47 - ubuntu 18.04 "os": os_id, # 47 - ubuntu 18.04
# "xen_cpu": 2, # dont give a fuck # "xen_cpu": 2, # dont give a fuck
# "xen_ram": 4096, # dont give a fuck # "xen_ram": 4096, # dont give a fuck
"ddos_guard": False "ddos_guard": False
}, },
"comment": comment, "comment": comment,
"group_id": 350519, # https://public-api.timeweb.com/api/v1/accounts/{user}/group "group_id": group_id, # https://public-api.timeweb.com/api/v1/accounts/{user}/group
"name": "string", # what is this for? "name": "string", # what is this for?
"preset_id": preset, # you can not create vds without this, but how to create flexible vds? (example: 20) "preset_id": preset, # you can not create vds without this, but how to create flexible vds? (preset example: 20)
"install_ssh_key": "", "install_ssh_key": "",
"server_id": None, "server_id": None,
"local_networks": [] "local_networks": []
} }
} }
print(data)
response = requests.post( response = requests.post(
"https://public-api.timeweb.com/api/v1/vds", "https://public-api.timeweb.com/api/v1/vds",
headers=reqHeader, headers=reqHeader,
json=data json=data
) )
print(response.json)
if not response.ok: if not response.ok:
print(typer.style("Error", fg=typer.colors.RED)) print(typer.style("Error", fg=typer.colors.RED))
sys.exit(1) sys.exit(1)
else: else:
response = response.json() response = response.json()
print(response) for frame in cycle(r'-\|/'):
state = Server.get_vds(response['server']['id'])
if state:
if state['server']['status'] == 'on':
print(typer.style("\nCreated: " + response['server']['configuration']['caption'], fg=typer.colors.GREEN))
break
print('\r', frame, sep='', end='', flush=True)
sleep(0.1)
@servers_app.command("goto") @servers_app.command("goto")