Skip to content

Commit

Permalink
Added connect command
Browse files Browse the repository at this point in the history
Signed-off-by: Victor Moene <victor.moene@northern.tech>
Ticket: ENT-5726
  • Loading branch information
victormlg committed Jan 13, 2025
1 parent 43d720e commit 23286ed
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 0 deletions.
10 changes: 10 additions & 0 deletions cf_remote/commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
run_command,
transfer_file,
deploy_masterfiles,
open_shell,
)
from cf_remote.packages import Releases
from cf_remote.web import download_package
Expand Down Expand Up @@ -931,3 +932,12 @@ def agent(hosts, bootstrap=None):
print(output)

return 0


def connect_cmd(hosts, users=None):

if len(hosts) > 1:
user_error("You can only connect to one host at a time")

print("Opening a SSH command shell...")
return open_shell(hosts[0])
7 changes: 7 additions & 0 deletions cf_remote/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -274,6 +274,11 @@ def _get_arg_parser():
)
sp.add_argument("--bootstrap", "-B", help="Which hub to bootstrap to", type=str)

sp = subp.add_parser("connect", help="Opens interactive ssh shell")
sp.add_argument(
"-hosts", "-H", help="Host to open the shell on", type=str, required=True
)

return ap


Expand Down Expand Up @@ -388,6 +393,8 @@ def run_command_with_args(command, args):
return commands.deploy(args.hub, args.masterfiles)
elif command == "agent":
return commands.agent(args.hosts, args.bootstrap)
elif command == "connect":
return commands.connect_cmd(args.hosts, None)
else:
user_error("Unknown command: '{}'".format(command))

Expand Down
26 changes: 26 additions & 0 deletions cf_remote/remote.py
Original file line number Diff line number Diff line change
Expand Up @@ -632,3 +632,29 @@ def deploy_masterfiles(host, tarball, *, connection=None):
return 1
print("Policy set successfully deployed to '%s' 🚀" % host)
return 0


@auto_connect
def open_shell(host, connection=None):
print("Enter 'exit' to log out\n")

cmd = ""
while cmd != "exit":
try:
cmd = input("\033[92m{}\033[00m :~ $ ".format(host))
result = connection.run(cmd, hide=True)

if cmd == "exit":
pass
elif result.retcode == 0:
print(result.stdout.strip().strip("\n"))
else:
print(result.stderr.strip("\n"))
except KeyboardInterrupt:
print()
continue
except EOFError:
print()
return 0

return 0

0 comments on commit 23286ed

Please sign in to comment.