def execute(self): headers = ["ID", "Name", "Status", "Created", "Updated"] set_file = self.args["--file"] default_file = orch.check_manifest_file() if set_file: if os.path.exists(set_file): default_file = set_file else: utils.log_err("{} file is not exists!".format(set_file)) exit() if not default_file: utils.log_err("Can't find neo.yml manifest file!") exit() deploy_init = orch.initialize(default_file) try: orch.do_update(deploy_init) except: utils.log_err("Update Stack failed...") exit() projects = utils.get_project(default_file) project_list = list() for project in projects: proj = orch.get_stack(project) if proj: project_list.append(proj) if len(project_list) > 0: print(tabulate(project_list, headers=headers, tablefmt="grid"))
def test_do_create(self): cwd = os.getcwd() deploy_init = orch.initialize(cwd + "/tests/neo.yml") orch.do_create(deploy_init) # check deployed vm vm_data = vm_lib.get_list() for vm in vm_data: if vm.name == 'unittest-vm': for network_name, network in vm.networks.items(): assert network_name == 'unittest-network'
def execute(self): """ Remote client over SSH """ if self.args["ssh"]: cridential = self.args["<USER@HOSTS>"].split("@") if len(cridential) != 2: print(self.__doc__) exit(0) user = cridential[0] hostname = cridential[1] utils.ssh_shell(hostname, user) exit(0) """ Remote VM over SSH """ if self.args["vm"]: vm_id = self.args["<VM_ID>"] """ cek vm metadata from stack """ utils.log_info("Check your key pairs") vm_detail = vm_lib.detail(vm_id).to_dict() key_pair_temp = tempfile.NamedTemporaryFile(delete=True) try: key_name = vm_detail["key_name"] out = orch.get_private_key(key_name) if out: with open(key_pair_temp.name, 'w') as pkey: pkey.write(out) os.chmod(key_pair_temp.name, 0o600) utils.log_info("Done...") else: utils.log_err( "Can't find key pairs on your Virtual Machine!") exit() except Exception as e: utils.log_err("Can't find key pairs on your Virtual Machine!") exit() # Address addr = list() addr_objs = utils.get_index(vm_detail["addresses"]) if len(addr_objs) > 0: for addr_obj in addr_objs: for addr_ip in vm_detail["addresses"][addr_obj]: if addr_ip["OS-EXT-IPS:type"] == "floating": addr_meta = addr_ip["addr"] addr.append(addr_meta) if not (len(addr) > 0): utils.log_err("Can't find floating IP Address!") exit() utils.log_info("Check username") user = orch.get_metadata(vm_detail["name"], "user") if not user: user = "" while user == "": user = input("Username : "******"Login with {}".format(user)) utils.ssh_shell(addr[0], user, key_file=key_pair_temp.name) exit(0) """ Remote by manifest file neo.yaml """ set_file = self.args["--file"] default_file = orch.check_manifest_file() deploy_file = ".deploy/deploy.yml" if set_file: if os.path.exists(set_file): default_file = set_file else: utils.log_err("{} file is not exists!".format(set_file)) exit() if not default_file: utils.log_err("Can't find neo.yml manifest file!") exit() if os.path.exists(deploy_file): deploy_init = utils.yaml_parser(deploy_file) deploy_init = [ d_init for d_init in deploy_init if d_init["stack"] in ["instances", "clusters", "databases"] ] else: deploy_init = orch.initialize(default_file) deploy_init = [ d_init for d_init in deploy_init if d_init["stack"] in ["instances", "clusters", "databases"] ] meta = None if len(deploy_init) == 1: meta = deploy_init[0] if len(deploy_init) > 1: meta_project = [pra_meta["project"] for pra_meta in deploy_init] meta_field = [{ "type": "TitleSelectOne", "name": "Select Project", "key": "project", "values": meta_project }] meta_field = utils.prompt_generator("Select project...", meta_field) meta = [ pra_meta for pra_meta in deploy_init if pra_meta in [meta_field["project"]] ][0] if meta: project_name = meta["project"] project_dir = meta["dir"] private_key_file = "{}/private_key.pem".format(project_dir) project_hostname = None project_user = None if not os.path.exists(private_key_file): utils.log_info( "Generate {} private key...".format(project_name)) wait_key = True while wait_key: out = orch.get_pkey_from_stack(project_name) if out: with open(private_key_file, "w") as pkey: pkey.write(out) os.chmod(private_key_file, 0o600) utils.log_info("Done...") wait_key = False else: pkeys = orch.get_private_key(project_name) if pkeys: with open(private_key_file, "w") as pkey: pkey.write(pkeys) os.chmod(private_key_file, 0o600) utils.log_info("Done...") wait_key = False else: time.sleep(5) if os.path.exists(private_key_file): if not project_hostname: project_hostname = orch.get_metadata( project_name, "controller") project_user = orch.get_metadata(project_name, "user") do_ssh = True print("Try to connect...", end="") while do_ssh: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) result = sock.connect_ex((project_hostname, 22)) if result == 0: print("\nSuccess...") time.sleep(3) do_ssh = False else: print(".", end="") time.sleep(3) do_ssh = True if self.args["--command"]: try: utils.ssh_out_stream(project_hostname, project_user, self.args["--command"], key_file=private_key_file) except KeyboardInterrupt: exit() if self.args["--tunneling"]: try: tunnel_args = " ".join([ "-L {}".format(t_arg) for t_arg in self.args["--tunneling"].split(",") ]) commands = "ssh -i {} {} {}@{}".format( private_key_file, tunnel_args, project_user, project_hostname).split(" ") subprocess.call(commands) except KeyboardInterrupt: exit() utils.ssh_shell(project_hostname, project_user, key_file=private_key_file)
def execute(self): if self.args["--template"]: if self.args["--template"] in ("clusters", "instances", "networks"): tmpl = self.args["--template"] if self.args["--interactive"]: ncurses.init(stack=tmpl) else: prompt.init(stack=tmpl) exit() if self.args["kubernetes"]: if self.args["--interactive"]: print(ncurses.init(stack="clusters", project="kubernetes")) else: print(prompt.init(stack="clusters", project="kubernetes")) if self.args["vm"]: if self.args["--interactive"]: print(ncurses.init(stack="instances", project="vm")) else: print(prompt.init(stack="instances", project="vm")) headers = ["ID", "Name", "Status", "Created", "Updated"] set_file = self.args["--file"] default_file = orch.check_manifest_file() if set_file: if os.path.exists(set_file): default_file = set_file else: utils.log_err("{} file is not exists!".format(set_file)) exit() if not default_file: utils.log_err("Can't find neo.yml manifest file!") q_stack = utils.question("Do you want to generate neo.yml manifest? ") if q_stack: if self.args["--interactive"]: print(ncurses.init()) else: print(prompt.init()) q_deploy = utils.question("Continue to deploy? ") if q_deploy: default_file = "neo.yml" else: exit() else: exit() else: q_deploy = utils.question("Continue to deploy? ") if q_deploy: default_file = "neo.yml" else: exit() deploy_init = orch.initialize(default_file) try: orch.do_create(deploy_init) except Exception as e: utils.log_err(e) utils.log_err("Deploying Stack failed...") exit() projects = utils.get_project(default_file) project_list = list() for project in projects: proj = orch.get_stack(project) if proj: project_list.append(proj) if len(project_list) > 0: print(tabulate(project_list, headers=headers, tablefmt="grid"))
def execute(self): if self.args["--template"]: if self.args["--template"] in ('clusters', 'instances', 'networks'): tmpl = self.args["--template"] if self.args["--interactive"]: ncurses.init(stack=tmpl) else: prompt.init(stack=tmpl) exit() if self.args["kubernetes"]: if self.args["--interactive"]: print(ncurses.init(stack="clusters", project="kubernetes")) else: print(prompt.init(stack="clusters", project="kubernetes")) if self.args["vm"]: if self.args["--interactive"]: print(ncurses.init(stack="instances", project="vm")) else: print(prompt.init(stack="instances", project="vm")) headers = ["ID", "Name", "Status", "Created", "Updated"] set_file = self.args["--file"] default_file = orch.check_manifest_file() if set_file: if os.path.exists(set_file): default_file = set_file else: utils.log_err("{} file is not exists!".format(set_file)) exit() if not default_file: utils.log_err("Can't find neo.yml manifest file!") q_stack = utils.question( "Do you want to generate neo.yml manifest? ") if q_stack: if self.args["--interactive"]: print(ncurses.init()) else: print(prompt.init()) q_deploy = utils.question("Continue to deploy? ") if q_deploy: default_file = "neo.yml" else: exit() else: exit() else: q_deploy = utils.question("Continue to deploy? ") if q_deploy: default_file = "neo.yml" else: exit() deploy_init = orch.initialize(default_file) try: orch.do_create(deploy_init) except Exception as e: utils.log_err(e) utils.log_err("Deploying Stack failed...") exit() projects = utils.get_project(default_file) project_list = list() for project in projects: proj = orch.get_stack(project) if proj: project_list.append(proj) if len(project_list) > 0: print(tabulate(project_list, headers=headers, tablefmt="grid"))
def execute(self): """ Remote client over SSH """ if self.args["ssh"]: cridential = self.args["<USER@HOSTS>"].split("@") if len(cridential) != 2: print(self.__doc__) exit(0) user = cridential[0] hostname = cridential[1] utils.ssh_shell(hostname, user) exit(0) """ Remote VM over SSH """ if self.args["vm"]: vm_id = self.args["<VM_ID>"] """ cek vm metadata from stack """ utils.log_info("Check your key pairs") vm_detail = vm_lib.detail(vm_id).to_dict() key_pair_temp = tempfile.NamedTemporaryFile(delete=True) try: key_name = vm_detail["key_name"] out = orch.get_private_key(key_name) if out: with open(key_pair_temp.name, 'w') as pkey: pkey.write(out) os.chmod(key_pair_temp.name, 0o600) utils.log_info("Done...") else: utils.log_err("Can't find key pairs on your Virtual Machine!") exit() except Exception as e: utils.log_err("Can't find key pairs on your Virtual Machine!") exit() # Address addr = list() addr_objs = utils.get_index(vm_detail["addresses"]) if len(addr_objs) > 0: for addr_obj in addr_objs: for addr_ip in vm_detail["addresses"][addr_obj]: if addr_ip["OS-EXT-IPS:type"] == "floating": addr_meta = addr_ip["addr"] addr.append(addr_meta) if not (len(addr) > 0): utils.log_err("Can't find floating IP Address!") exit() utils.log_info("Check username") user = orch.get_metadata(vm_detail["name"], "user") if not user: user = "" while user == "": user = input( "Username : "******"Login with {}".format(user)) utils.ssh_shell(addr[0], user, key_file=key_pair_temp.name) exit(0) """ Remote by manifest file neo.yaml """ set_file = self.args["--file"] default_file = orch.check_manifest_file() deploy_file = ".deploy/deploy.yml" if set_file: if os.path.exists(set_file): default_file = set_file else: utils.log_err("{} file is not exists!".format(set_file)) exit() if not default_file: utils.log_err("Can't find neo.yml manifest file!") exit() if os.path.exists(deploy_file): deploy_init = utils.yaml_parser(deploy_file) deploy_init = [d_init for d_init in deploy_init if d_init["stack"] in ["instances","clusters","databases"]] else: deploy_init = orch.initialize(default_file) deploy_init = [d_init for d_init in deploy_init if d_init["stack"] in ["instances","clusters","databases"]] meta = None if len(deploy_init) == 1: meta = deploy_init[0] if len(deploy_init) > 1: meta_project = [pra_meta["project"] for pra_meta in deploy_init] meta_field = [{"type": "TitleSelectOne", "name": "Select Project", "key": "project", "values": meta_project}] meta_field = utils.prompt_generator("Select project...",meta_field) meta = [pra_meta for pra_meta in deploy_init if pra_meta in [meta_field["project"]]][0] if meta: project_name = meta["project"] project_dir = meta["dir"] private_key_file = "{}/private_key.pem".format(project_dir) project_hostname = None project_user = None if not os.path.exists(private_key_file): utils.log_info("Generate {} private key...".format( project_name)) wait_key = True while wait_key: out = orch.get_pkey_from_stack(project_name) if out: with open(private_key_file, "w") as pkey: pkey.write(out) os.chmod(private_key_file, 0o600) utils.log_info("Done...") wait_key = False else: pkeys = orch.get_private_key(project_name) if pkeys: with open(private_key_file, "w") as pkey: pkey.write(pkeys) os.chmod(private_key_file, 0o600) utils.log_info("Done...") wait_key = False else: time.sleep(5) if os.path.exists(private_key_file): if not project_hostname: project_hostname = orch.get_metadata(project_name, "controller") project_user = orch.get_metadata(project_name, "user") do_ssh = True print("Try to connect...", end="") while do_ssh: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) result = sock.connect_ex((project_hostname, 22)) if result == 0: print("\nSuccess...") time.sleep(3) do_ssh = False else: print(".", end="") time.sleep(3) do_ssh = True if self.args["--command"]: try: utils.ssh_out_stream(project_hostname, project_user, self.args["--command"], key_file=private_key_file) except KeyboardInterrupt: exit() elif self.args["--tunneling"]: try: tunnel_args = " ".join(["-L {}".format(t_arg) for t_arg in self.args["--tunneling"].split(",")]) commands = "ssh -i {} {} {}@{}".format(private_key_file, tunnel_args, project_user, project_hostname).split(" ") subprocess.call(commands) except KeyboardInterrupt: exit() else: try: utils.ssh_shell(project_hostname, project_user, key_file=private_key_file) except KeyboardInterrupt: exit()