much better cli

This commit is contained in:
ahmadbilalkhalid 2019-07-17 19:58:39 +05:00
commit d045d70609
11 changed files with 210 additions and 121 deletions

0
commands/__init__ Normal file
View file

30
commands/host.py Normal file
View file

@ -0,0 +1,30 @@
import click
import json
import requests
from decouple import config
from helper import OTPCredentials
@click.group()
def host():
pass
@host.command("add")
@click.option("--name", required=True)
@click.option("--realm", required=True)
@click.option("--seed", required=True)
@click.option("--specs", required=True)
@click.option("--hostname", required=True)
def add_host(name, realm, seed, specs, hostname):
with open(specs, "r") as specs_f:
specs = json.loads(specs_f.read())
data = {
**OTPCredentials(name, realm, seed).get_json(),
"specs": specs,
"hostname": hostname,
}
r = requests.post(f"{config('UCLOUD_API_SERVER')}/host/create", json=data)
print(json.loads(r.content))

30
commands/image.py Normal file
View file

@ -0,0 +1,30 @@
import click
import json
import requests
from decouple import config
from helper import OTPCredentials
@click.group()
def image():
pass
@image.command("list")
@click.option("--public", is_flag=True)
@click.option("--private", is_flag=True)
def list(public, private):
if public:
r = requests.get(f"{config('UCLOUD_API_SERVER')}/image/list-public")
print(json.loads(r.content))
@image.command("create-from-file")
@click.option("--name", required=True)
@click.option("--uuid", required=True)
@click.option("--image_store_name", required=True)
def create_from_file(name, uuid, image_store_name):
data = {"name": name, "uuid": uuid, "image_store": image_store_name}
r = requests.post(f"{config('UCLOUD_API_SERVER')}/image/create", data)
print(r.content.decode("utf-8"))

31
commands/user.py Normal file
View file

@ -0,0 +1,31 @@
import click
import json
import requests
from decouple import config
from helper import OTPCredentials
@click.group()
def user():
pass
@user.command("list-files")
@click.option("--name", required=True)
@click.option("--realm", required=True)
@click.option("--seed", required=True)
def list_files(name, realm, seed):
data = OTPCredentials(name, realm, seed).get_json()
r = requests.get(f"{config('UCLOUD_API_SERVER')}/user/files", json=data)
print(json.loads(r.content))
@user.command("list-vms")
@click.option("--name", required=True)
@click.option("--realm", required=True)
@click.option("--seed", required=True)
def list_vms(name, realm, seed):
data = OTPCredentials(name, realm, seed).get_json()
r = requests.get(f"{config('UCLOUD_API_SERVER')}/user/vms", json=data)
print(json.loads(r.content))

75
commands/vm.py Normal file
View file

@ -0,0 +1,75 @@
import click
import json
import requests
from decouple import config
from helper import OTPCredentials
def vm_action(action, otp, vmid):
data = {**otp.get_json(), "vmid": vmid}
r = requests.post(f"{config('UCLOUD_API_SERVER')}/vm/{action}", json=data)
return r
@click.group()
def vm():
pass
@vm.command("create")
@click.option("--name", required=True)
@click.option("--realm", required=True)
@click.option("--seed", required=True)
@click.option("--specs", required=True)
@click.option("--image_uuid", required=True)
def create(name, realm, seed, specs, image_uuid):
with open(specs, "r") as specs_f:
specs = json.loads(specs_f.read())
data = {
**OTPCredentials(name, realm, seed).get_json(),
"specs": specs,
"image_uuid": image_uuid,
}
r = requests.post(f"{config('UCLOUD_API_SERVER')}/vm/create", json=data)
print(json.loads(r.content))
@vm.command("start")
@click.option("--name", required=True)
@click.option("--realm", required=True)
@click.option("--seed", required=True)
@click.option("--vmid", required=True)
def start(name, realm, seed, vmid):
r = vm_action("start", OTPCredentials(name, realm, seed), vmid)
print(json.loads(r.content))
@vm.command("suspend")
@click.option("--name", required=True)
@click.option("--realm", required=True)
@click.option("--seed", required=True)
@click.option("--vmid", required=True)
def suspend(name, realm, seed, vmid):
r = vm_action("suspend", OTPCredentials(name, realm, seed), vmid)
print(json.loads(r.content))
@vm.command("resume")
@click.option("--name", required=True)
@click.option("--realm", required=True)
@click.option("--seed", required=True)
@click.option("--vmid", required=True)
def resume(name, realm, seed, vmid):
r = vm_action("resume", OTPCredentials(name, realm, seed), vmid)
print(json.loads(r.content))
@vm.command("shutdown")
@click.option("--name", required=True)
@click.option("--realm", required=True)
@click.option("--seed", required=True)
@click.option("--vmid", required=True)
def shutdown(name, realm, seed, vmid):
r = vm_action("shutdown", OTPCredentials(name, realm, seed), vmid)
print(json.loads(r.content))