From 267828e85a63a44b843c61d59932e8d42da99ca5 Mon Sep 17 00:00:00 2001 From: meow Date: Mon, 23 Dec 2019 18:23:18 +0500 Subject: [PATCH] ssh subcommand added for vm command + config file added --- .gitignore | 5 ++++- conf/ucloud-cli.conf | 4 ++++ setup.py | 5 ++++- ucloud_cli/commands/vm.py | 21 +++++++++++++++++++++ ucloud_cli/config.py | 2 +- 5 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 conf/ucloud-cli.conf diff --git a/.gitignore b/.gitignore index e4b843c..1e835aa 100755 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,7 @@ .vscode __pycache__ -ucloud_cli.egg-info \ No newline at end of file +ucloud_cli.egg-info + +build/ +dist/ \ No newline at end of file diff --git a/conf/ucloud-cli.conf b/conf/ucloud-cli.conf new file mode 100644 index 0000000..54b0dea --- /dev/null +++ b/conf/ucloud-cli.conf @@ -0,0 +1,4 @@ +OTP_NAME=replace_me +OTP_REALM=replace_me +OTP_SEED=replace_me +UCLOUD_API_SERVER=http://[::]:5000 \ No newline at end of file diff --git a/setup.py b/setup.py index 83d38a8..497cea1 100644 --- a/setup.py +++ b/setup.py @@ -1,3 +1,5 @@ +import os + from setuptools import setup, find_packages with open("README.md", "r") as fh: @@ -25,4 +27,5 @@ setup(name='ucloud_cli', 'click' ], scripts=['bin/ucloud-cli'], - zip_safe=False) \ No newline at end of file + data_files=[(os.path.expanduser('~/ucloud/'), ['conf/ucloud-cli.conf'])], + zip_safe=False) diff --git a/ucloud_cli/commands/vm.py b/ucloud_cli/commands/vm.py index 4af3ea5..d0c0bbc 100755 --- a/ucloud_cli/commands/vm.py +++ b/ucloud_cli/commands/vm.py @@ -1,5 +1,7 @@ import click +import json import requests +import subprocess as sp from ucloud_cli.commands.helper import OTPCredentials, load_dump_pretty from ucloud_cli.config import env_vars @@ -118,3 +120,22 @@ def vm_migration(name, realm, seed, vm_name, destination, in_support_of): join_path(env_vars.get("UCLOUD_API_SERVER"), "vm", "migrate"), json=data ) print(load_dump_pretty(r.content)) + + +@vm.command("ssh") +@click.option("--name", required=True, default=env_vars.get("OTP_NAME")) +@click.option("--realm", required=True, default=env_vars.get("OTP_REALM")) +@click.option("--seed", required=True, default=env_vars.get("OTP_SEED")) +@click.option("--vm-name", required=True) +@click.option("--in_support_of") +def ssh(name, realm, seed, vm_name, in_support_of): + otp = OTPCredentials(name, realm, seed) + data = {**otp.get_json(), "vm_name": vm_name, "in_support_of": in_support_of} + r = requests.get(join_path(env_vars.get("UCLOUD_API_SERVER"), "vm", "status"), json=data) + try: + _json = json.loads(r.content) + sp.run(['ssh', '-o', 'ConnectTimeout=10', + 'root@{}'.format(_json['ip'][0])]) + except Exception as err: + print("Some error occurred while accessing VM." + "Make sure VM is running", err) diff --git a/ucloud_cli/config.py b/ucloud_cli/config.py index ce45480..188010b 100644 --- a/ucloud_cli/config.py +++ b/ucloud_cli/config.py @@ -3,7 +3,7 @@ from os.path import expanduser from decouple import Config, RepositoryEnv try: - env_vars = Config(RepositoryEnv(expanduser("~/.ucloud.conf"))) + env_vars = Config(RepositoryEnv(expanduser("~/ucloud/ucloud-cli.conf"))) except Exception as err: print(err) sys.exit(1) \ No newline at end of file